欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

腾讯2017秋招笔试编程题--素数对

程序员文章站 2024-03-07 13:09:09
...

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

输入描述:

输入包括一个整数n,(3 ≤ n < 1000)

输出描述:

输出对数

示例1

输入

10

输出

2

思路:先求出小于这个数的素数,素数就是质数,特点是只能被1和本身整数,具体判断条件是如果不能被2到根号n的整数整除,就是素数。接下来和leetcode第一题two sum相同处理即可,注意可以重复使用一个数。

  #include <iostream> 
  #include <algorithm> 
  #include <math.h> 
  #include <map> 
  using namespace std; 
  int main(){ 
      int n,result=0; 
      cin>>n; 
      vector<int>nums; 
      for(int i=2;i<=n-2;i++){ 
          bool flag=true; 
          for(int j=2;j<=sqrt(i);j++) 
          if((i%j)==0) flag=false; 
          if(flag) nums.push_back(i); 
      } 
      map<int,int>mapping; 
      for(int i=0;i<nums.size();i++){ 
          mapping[nums[i]]=i; 
      } 
      for(int i=0;i<nums.size();i++){ 

  if((mapping.find(n-nums[i])!=mapping.end())&&(mapping[n-nums[i]]>=i)) 
              result++; 
      } 
      cout<<result<<endl; 
      return 0; 
  }