喜欢吃菠菜 发表于 2018-10-17 09:51:09

凌九霄 发表于 2018-10-17 09:38
首先这个方式确实简洁,效率大概是我那个的2倍多点。我相信,随着范围的增大,速度的优势也会更大。缺 ...

是的。python语言本来就是要牺牲效率而使代码优雅简洁。如果要解决大的数据肯定用python很不科学,这个必须承认。我这个只是匆忙中写的,没有优化。希望只是和大家交流一下。多指教了

喜欢吃菠菜 发表于 2018-11-6 23:45:13

凌九霄 发表于 2018-10-17 09:38
首先这个方式确实简洁,效率大概是我那个的2倍多点。我相信,随着范围的增大,速度的优势也会更大。缺 ...

#筛选法求素数
    def getprimes(n):
      l=+
      i=3
      while i*i<=n:
            if l!=0:
                j=i*i
                while n>=j:
                  l=0
                  j+=2*i
            i+=2
      return +!=0]
    import time
    start=time.clock()
    print(getprimes(10000000))
    print('时间:%f' % (time.clock()-start))

#这个是加入算法的高效快速的查找方法,1千万内的素数大概只要10秒左右吧,1个亿大概200秒左右吧。参考一下。

考拉熊 发表于 2018-11-7 09:18:43

过来顶一下

凌九霄 发表于 2018-11-7 16:35:39

本帖最后由 凌九霄 于 2018-11-7 17:30 编辑

喜欢吃菠菜 发表于 2018-11-6 23:45
#筛选法求素数
    def getprimes(n):
      l=+


嘿嘿,还真执着啊,自己有运行过么?或者只注意到时间?

sunrise085 发表于 2019-1-24 11:31:07

这是我写的程序~~不知还能否在压缩运行时间
def sieve(num=200):
        fulllist=list(range(2,num+1))
        result=[]
        while fulllist:
                result.append(fulllist.pop(0))
                for i in fulllist:
                        if i%result[-1]==0:
                                fulllist.remove(i)
        return result

uune 发表于 2020-6-24 13:08:22

n = 200
num =    #生成2到n之间的数字

for i in num:       #遍历num列表
    #因为质数的因数只有1和本身,所以从2开始。最小质数是2,x的最大值是n//2
    for x in range(2,n//2):
      if i*x in num:
            #print(i*x, '在内num列表中')
            num.remove(i*x)
print('num =',num)
页: 1 2 [3]
查看完整版本: Python:每日一题 205