腾讯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;
}