题目详情:
1007 素数对猜想 (20 分)
让我们定义dn为:dn =pn+1−pn,其中pi是第i个素数。显然有d1 =1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105 ),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
解答:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
int n; cin>>n;
int cnt = 0;
vector<int> v;
for(int i=2;i <= n;i++){ //筛选小于n的素数
int flag = 1;
int k = sqrt(i);
for(int j=2;j <= k;j++){
if(i%j == 0){
flag = 0;
break;
}
}
if(flag == 1) v.push_back(i); //将素数存入一个vector
}
for(int k=0;k < v.size();k++){
if(v[k+1]-v[k] == 2) cnt++; //判断是否满足猜想
}
cout<<cnt<<endl;
return 0;
}
关键点:
1.素数的筛选
2.判断是否满足筛选条件
注意点:
题目要求是不超过N的素数对,也就是说包含了等于N的这种情况(例如N=5,则有一个素数对),因此循环条件中应为i<=n。