一个测试点没过不知道为什么
18'
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define maxn 100010
int isprime[maxn];
int num=0;
bool is[maxn]={false};
void pd(int n)
{
for(int i=2;i<maxn;i++)
{
if(is[i]==false)
{
isprime[num++]=i;
if(i>=n)
break;
for(int j=i+i;j<maxn;j+=i)
{
is[j]=true;
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
pd(n);
int sum=0;
for(int i=1;i<=num;i++)
{
if(isprime[i]-isprime[i-1]==2)
sum++;
}
printf("%d\n",sum);
return 0;
}
下面是AC代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define maxn 100010
int pd(int n)
{
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n;
scanf("%d",&n);
int sum=0;
for(int i=3;i+2<=n;i+=2)//这里的判断条件要注意
{
if(pd(i)==1&&pd(i+2)==1)
{
sum++;
}
}
printf("%d\n",sum);
return 0;
}