思路:
此题没有什么特别要注意的点,就是先用筛法求出n一下所有的素数,然后线性判断相邻的差是否为2
代码:
#include<iostream>
#include<math.h>
using namespace std;
int state[100001];
int prime[20000];
void findPrime(int n);
void findPrime(int n)
{
int i, j;
for (i = 2; i <= n; i++)
{
if (state[i])
continue;
prime[0]++;
prime[prime[0]] = i;
if (i<=(int)(sqrt(n)))
for (j = i*i; j <= n; j = j + i)
state[j] = 1;
}
}
int main()
{
int n, i, j;
int ans = 0;
cin >> n;
for (i = 2; i <= n; i++)
state[i] = 0;//0表示 是素数
prime[0] = 0;
findPrime(n);
for (i = 1; i < prime[0]; i++)
if (prime[i + 1] - prime[i] == 2)
ans++;
cout << ans;
//while (1)
//{
//}
return 0;
}