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

本文介绍了一种基于素数筛选法的高效算法,用于找出指定范围内的所有素数。该算法通过去除素数倍数的方式,避免了直接使用素数定义进行判断所带来的效率问题。文章详细解释了算法的实现过程,并提供了Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

从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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值