算法优化:Python3求5000000以内的素数(二代i3处理器60秒算出)

博客探讨了如何利用Python3优化算法,以提高找出5000000以内素数的效率。通过对比两个案例的运行结果,发现案例一在时间复杂度和算法设计上都优于案例二,尽管两者的时间复杂度相同,但案例一的内层循环次数较少,从而提升了效率。最终得出500万以内的素数数量为348513个。

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

定理1:素数大于1并且只能被1和它自身整除
定理2:一个数如果能被它自身之外的素数整除就是合数
定理3:任意数至少都可以分解成两个因子相乘
定理4:一个数如果是素数那么他一定不能被其他小于它的素数整除
--------------------------------------------
注意:由于500万以内素数非常多,我就不打印到屏幕了,只统计有多少个素数(count_number表示)

案例一:

import math
import time
start = time.clock()
lst = []
flag = False
count_outer = 0
count_inner = 0
count_compute1 = 0
count_compute2 = 0
count_number = 0

for x in range(1,5000000,2):
    count_outer += 1
    if x == 1:
        continue
    count_compute2 += 1
    j = math.ceil(math.sqrt(x))    #注意此处先算出值非常关键,不可写入到下面的for循环中去,否则效率减半
    for i in lst:
        count_inner += 1
        count_compute1 += 1
        if x % i == 0:
            flag = True
            break
        if i >= j:
            flag = False
            break
    if not flag:
        lst.append(x)
        count_number += 1
else:
    count_number += 1
end = time.clock()
print('time spent = {}'.format(end - start))
print('count_outer = {} , count_inner = {} , count_compute
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值