很明显的素数除了2,都是奇数,这么说求素数对,不可能是两对偶数了,2跟3的差值又不是题目所要求的2,那么这样的话,可以直接从3开始求答案,只需要i不断的加2,并且注意条件,i+2《M,这里即保证了差值为2,再来判断是否是素数,素数仍然用初始化方法!
#include<iostream>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
bool test[105000];
int N = 105000;
int num;
int P[105000];
//有点像dp一次全部找到!
void isPrime() {
int i = 2;
for(; i <= N; i++) {
if(test[i]==false) {//注意两个《 不要漏了
P[num++] = i;
for(int j = i + i; j <= N; j+=i) {
test[j] = true;
}
}
}
}
int main() {
int M,n;
scanf("%d",&M);
memset(test,0,sizeof(test));
memset(P,0,sizeof(P));
num = 0;
isPrime();
int cnt = 0;
for(int i = 3; i + 2 <= M; i+=2) {
if(!test[i]&&!test[i+2])
cnt++;
}
printf("%d",cnt);
return 0;
}