解题思路:其实这道题的本质还是让你写素数,我们循环N,如果i和i+2都是素数就count++,之后从新素数在开始判断
c语言版
#include<stdio.h>
int prime(int n)
{
int i,flag=1;
for(i=2;i*i<=n;i++) //很多人愿意用sqrt函数去写这个,我个人不建议,因为sqrt是一个double值在内存当中的存储类似科学计数法,不可能完美的保存浮点数,只是相近值,如果例子某些卡的很严格,很难找出来这样的错误,一般尽量不用double值比较
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
int main()
{
int n;
scanf("%d",&n);
int i,count=0;
for(i=2;i<=n-2;i++)
{
if(prime(i)&&prime(i+2))
{
count++;
i++;
}
}
printf("%d\n",count);
return 0;
}
python版本: 算法基本一样但是最后一个数据过不去,总是超时,无奈
def prime(n):
flag=True
i=2
while(i*i<=n):
if(n%i==0):
flag=False
break;
i=i+1
return flag
n=int(input())
count=0
for i in range(2,n-1):
if(prime(i) and prime(i+2)):
count=count+1
i=i+1
print(count)