zoukankan      html  css  js  c++  java
  • [效率算法]计算两百万以下质数的和

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

                               第二段网友写的,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)))
  • 相关阅读:
    iot 表 主键索引叶子块包含了表所有数据
    iot 表索引dump《2》
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    heap表和iot表排序规则不同
    ActiveMQ学习总结(4)——业界消息队列简介
    主宰全球的10大算法
    主宰全球的10大算法
    主宰全球的10大算法
    SVN学习总结(1)——SVN简介及入门使用
  • 原文地址:https://www.cnblogs.com/Alexisbusyblog/p/10054835.html
Copyright © 2011-2022 走看看