鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] Python:每日一题 205

[复制链接]
发表于 2018-11-6 23:45:13 | 显示全部楼层
凌九霄 发表于 2018-10-17 09:38
首先这个方式确实简洁,效率大概是我那个的2倍多点。我相信,随着范围的增大,速度的优势也会更大。缺 ...

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

#这个是加入算法的高效快速的查找方法,1千万内的素数大概只要10秒左右吧,1个亿大概200秒左右吧。参考一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-7 09:18:43 | 显示全部楼层
过来顶一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-7 16:35:39 | 显示全部楼层
本帖最后由 凌九霄 于 2018-11-7 17:30 编辑
喜欢吃菠菜 发表于 2018-11-6 23:45
#筛选法求素数
    def getprimes(n):
        l=[1,1,1]+


嘿嘿,还真执着啊,自己有运行过么?或者只注意到时间?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-24 11:31:07 | 显示全部楼层
这是我写的程序~~不知还能否在压缩运行时间
  1. def sieve(num=200):
  2.         fulllist=list(range(2,num+1))
  3.         result=[]
  4.         while fulllist:
  5.                 result.append(fulllist.pop(0))
  6.                 for i in fulllist:
  7.                         if i%result[-1]==0:
  8.                                 fulllist.remove(i)
  9.         return result
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-24 13:08:22 | 显示全部楼层
  1. n = 200
  2. num = [i for i in range(2,n)]   #生成2到n之间的数字

  3. for i in num:       #遍历num列表
  4.     #因为质数的因数只有1和本身,所以从2开始。最小质数是2,x的最大值是n//2
  5.     for x in range(2,n//2):
  6.         if i*x in num:
  7.             #print(i*x, '在内num列表中')
  8.             num.remove(i*x)
  9. print('num =',num)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 13:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表