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

来源:互联网 发布:淘宝卖家参加聚划算 编辑:程序博客网 时间:2024/06/06 08:33

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于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;   }