2017校招真题在线编程-素数对
题目描述
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
输出描述:
输出对数
示例1
输出
复制2
思路:可以写个函数判断素数,但感觉会比较麻烦,我们可以使用埃拉托斯特尼筛法判断所需区间内所有的素数,然后计数素数对即可。
代码:
#include<iostream> #include<vector> using namespace std; int main(){ int n; cin>>n; vector<int> v(1000,1); for(int i = 2; i< n-1 ;++i){//最小素数为2,相应区间2~n-2 if(v[i] == 1){ for(int j = 2; j*i < n-1; ++j) v[j*i] = 0; } } int res = 0; for(int i = 2; i <= n/2; ++i){ if(v[i] == 1 && v[n-i] == 1) ++res; } cout<<res; }
Know More ,Do More.