#include <stdio.h>
#include <math.h>
int main(void)
{
int n,i,j,k=0,cot=0,l;
int flag=1;
scanf("%d",&n);
int a[n];
for(i=2;i<=n;i++) //这题第一次做只拿了18分,错误完全是因为我没有加等于号,i<=n!!!
{
l=(int)sqrt(i);
for(j=2;j<=l;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
{
a[k]=i;
if(k>0)
{
if(a[k]-a[k-1]==2)
{
cot++;
}
}
k++;
}
else
{
flag=1;
}
}
printf("%d\n",cot);
return 0;
}
总结:可以优化的地方,对素数的判断可以优化
for(i=0;i<=n;i++)
{
for(j=2;j<(int)sqrt(i);j++)
{
if(j%i==0)
{
break;
}
}
if(j>(int)sqrt(i))
{
cot++; //如果在j的循环中没有使用break,而是j>sqrt(i)才打破的就说明没有符合的数,i是素数
}
}