ps.用时20ms。
1,一开始没读懂题,后面发现文中的“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。所以接下来知道要干嘛了。
2,一次性ac了,暴力枚举,没啥高深的地方。
3,简单说下思路,建立 A数组,比如A[i]存放的数值是判断i是不是素数,i为0表示为素数,1表示不是。
建立B数组来存放A数组中为素数的i。然后遍历B数组,相减,来判断相减值为2否,为2,则time自加,记录次数。
#include<iostream>
using namespace std;
#include<cmath>
int A[100001]={0}; // 0代表是素数,1代表不是
bool fy(int a){
if(a==1) return 0;
double a1=a;
for(int i=2;i<=int(sqrt(a1));i++){
if(a%i==0) return 0;
}
return 1;
}
int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++){
if(!A[i]){ //不知道是不是素数,那就进行判断
if(!fy(i)){ //不是素数,那么它的倍数也不是素数,这样可以节约时间。
for(int j=i;j<=n;j=j*2){
A[j]=1;
}
}
}
}
int time=0,count=0;
int B[100001]; //存放素数
for(int j=2;j<=n;j++) //遍历A ,值为0表示j为素数,那么存放到B中
{
if(A[j]==0)
B[count++]=j;
}
for(int j=1;j<count;j++){
if(B[j]-B[j-1]==2) time++;
}
cout<<time;
return 0;
}