[效率算法]计算两百万以下质数的和

这个题两段代码:第一段我自己写的,电脑差点炸了。垃圾

                           第二段网友写的,1.7s得出答案。流弊啊

将两段代码贴在这里,供自己日后学习研究这种效率算法代码的超一流思路

第一段

# 电脑都快爆了,还没算出答案
def isfrime(x):
    # if x == 2:
    #     return True
    for k in range(2,x):
        if x % k == 0:
            return False
    return True
print(2 + sum([i for i in range(3,2000000,2) if isfrime(i)]))  

第二段(流弊啊,愣是看了半天才懂明白是个怎样的思路)

'''
    getPrime : (原理)
             用的是标记法,先建一个列表,列表的项数等于要求的最大质数,内容都为True。
            然后第0,1项设为False,因为0和1都不是质数。
            从第2项开始,是2的倍数的项都是设为假,因为都不是质数。
            然后只要是列表内还没有设为假的数,从它开始,它的倍数都设为假,直到列表内全部为真的数,那就是质数。
            原理就是这样。
            利用列表的项数和列表值的对应关系。这样可以减少判断次数,当然速度就是最快的了。
'''
def run4(n):
        primes = [True]*n
        primes[0],primes[1]=False,False
        for (i, prime) in enumerate(primes):
                if prime:
                        #  这一步思路最是流弊啊
                        for j in range(i*i,n,i): primes[j] = False
        return [k for (k,trueprime) in enumerate(primes) if trueprime]

print (sum(run4(2000000)))
原文地址:https://www.cnblogs.com/Alexisbusyblog/p/10054835.html