埃拉托色尼筛选法求素数

埃拉托色尼筛选法求素数

列出大于等于2的自然数;2,3,4,5,6,7,8,9,10,11,…
取第一个数2,删掉所有2的倍数;2,3,5,7,9,11,13,14,15,…
取下一个数3,删掉所有3的倍数;3,5,7,11,13,17,19,23,…
取下一个数5,……不断筛选下去,就可找出所有素数
2,3,4,5,6,7,8910,11,12,13,141516,17,18
19,202122,23,2425262728,29,30,31,323334
3536,37,383940,41,42,43,444546,47,484950

Python实现

def primes():
    from functools import partial
    
    def num_generator():
        n = 2
        yield 2
        while True:
            n += 1
            yield n

    def not_divisible(mod, n):
        return n % mod != 0

    num_list = num_generator()
    while True:
        num = next(num_list)
        yield num
        not_divisible_n = partial(not_divisible, num)
        num_list = filter(not_divisible_n, num_list)


if __name__ == '__main__':
    for n in primes():
        if n < 50:
            print(n)
        else:
            break
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容