此题如果采用素数的定义来判别,将会超时,因此采用素数筛选法
核心思想:素数的倍数一定不是素数 偶数一定不是素数
从2开始依次往后面数,如果当前数字一个素数,那么就将所有其倍数的数从表中删除或者标记,然后最终得到所有的素数。
详细的解释可以看一下这位大大的博文
https://blog.youkuaiyun.com/power721/article/details/8216619
本文主要采用一种写法上简单的方式,效率上在1000以内差不多
def easyprm(N):
a = [0] * (N + 1) #初始化认为所有均为素数
a[0] = a[1] = 1
for i in range(2, N // 2 + 1): #查找所有素数的倍数
for j in range(2, N // i + 1):
a[i * j] = 1
res=[2]
for i in range(3,N+1,2): #只寻找奇数
if a[i]==0:
res.append(i)
return res
N=int(input())
A=easyprm(N)
sum=0
for i in range(len(A)-1):
if A[i+1]-A[i]==2:
sum+=1
print(sum)