1007. 素数对猜想 解决python超时问题

此题如果采用素数的定义来判别,将会超时,因此采用素数筛选法

核心思想:素数的倍数一定不是素数 偶数一定不是素数

从2开始依次往后面数,如果当前数字一个素数,那么就将所有其倍数的数从表中删除或者标记,然后最终得到所有的素数。

详细的解释可以看一下这位大大的博文

https://blog.csdn.net/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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值