题目链接在此。
思路
依然是用筛法求出素数表,之后根据输入的n,从0-num(num为n以内素数的个数)枚举,如果prime[i+1]-prime[i] == 2,res+1。
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
const int maxn = 100010;
int prime[maxn], num;
bool book[maxn] = {false};
void findPrime(int n){
for(int i = 2; i <= n; i++){ //注意是i<=n,不是i<n(反例:n=5)
if(book[i] == false){
prime[num++] = i;
for(int j = i+i; j < n; j+=i){
book[j] = true;
}
}
}
}
int main(){
scanf("%d",&n);
findPrime(n);
int res = 0;
for(int i = 0; i < num ; i++){
if(prime[i+1] - prime[i] == 2){
res++;
}
}
printf("%d\n",res);
return 0;
}