学习python高性能编程素数求解

文章介绍了在解决内存使用过高问题时,通过阅读《高性能编程》一书并以求解素数问题为例,展示了一种使用Python编写的优化算法。该算法通过迭代和筛选法找到一定范围内的素数,并在代码中采用了断言和列表推导式以提高效率。
摘要由CSDN通过智能技术生成

这几天需要了解遇到的内存使用过高,所以学习 高性能编程 一书,理解需要注意的地方。正好看到求解素数问题,尽管素数求解的方法很多。 但自己简单想了一下,也可以使用下面方法来作为示例。

import time

def get_primes(curr_n,curr_primes,max_value):
    # 要求 curr_n为偶数
    assert curr_n % 2 == 0
    local_primes=[]
    for i in range(curr_n+1,min(curr_n*curr_n,max_value),2):
        flag_prime=True
        for factor in curr_primes:
            if i % factor == 0:
                flag_prime=False
                break
        if flag_prime:
            local_primes.append(i)
    return local_primes

def get_primes_until_n(n):
    init_primes=[2]
    init_n=2
    while init_n<n:
        print(init_n)
        init_primes+=get_primes(init_n,init_primes,n)
        init_n=init_n*init_n

    return init_primes

if __name__ == '__main__':
    t1=time.time()
    primes=get_primes_until_n(10000000)
    # primes=get_primes_until_n(256)
    print("Took:", time.time() - t1)
    print(len(primes), primes[:10], primes[-10:])
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值