您的位置:首页 > 编程语言

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

2017-07-19 14:21 274 查看
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: