新手小白做题第四天
写博客记录自己的做题过程~
1007 素数对猜想 (20 分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
刚开始看到这题挺迷惑的,怎么做?把所有素数写出来吗?
写循环,算出一个素数n1,再算一个n2,判断是否差为2,然后将n1=n2,再算下一个素数为n2,再判断之间差是否为2,直到素数n2大于n为止
这个思路没有问题,获得的答案正确,又一个小技巧是n2可以直接+2
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int n1=2,n2=3,sum=0;
while(n2<=n){
for(;n2<=n;n2+=2){
int i=2;
for(;i<=sqrt(n2);i++){
if(n2%i==0)
break;
}
if(i>sqrt(n2)){
break;
}
}
if(n2-n1==2)
sum++;
n1=n2;
n2+=2;
}
cout<<sum;
return 0;
}
去看一下别人的代码。
思路都是差不多的,按下不表。我的while循环其实可以写为for循环,这样,后面就不用写n2+=2了。