用Python的列表方法求100000以内素数效率为什么那么低

strangcui 2018-07-11 11:23:28
用Python的列表方法求100000以内素数效率为什么那么低。我用数字整型普通计算方法时间大概为3.8秒,用列表存储素数的方法时间为70+秒。这相差太大了。
...全文
1077 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jtyoui 2020-03-21
  • 打赏
  • 举报
回复
用这个办法: https://github.com/PyUnit/pyunit-prime#%E8%BF%94%E5%9B%9E%E5%8C%BA%E9%97%B4%E5%86%85%E7%9A%84%E8%B4%A8%E6%95%B0 不到0.1秒钟
lcw1017 2019-01-16
  • 打赏
  • 举报
回复
用列表方法,数字越大,列表里面的长度越长,也可以增加一个判断,列表里面的值是否大于当前求判断的值的平方根,超过就可以不用继续运算了
lcw1017 2019-01-16
  • 打赏
  • 举报
回复
import time
from math import sqrt
def is_prime(n):
if n <= 1:
return False
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
m = 2
n = 100000
prime_list = []
start = time.clock()
for i in range(m, n):
if(is_prime(i)):
prime_list.append(i)
t = time.clock() - start
#print(prime_list)
print("find prime range( " + str(m) + ","+ str(n) + ") using time ..")
print(t)
weixin_44303198 2018-12-27
  • 打赏
  • 举报
回复
不至于吧,我不到1秒就算出来了啊,我电脑主频还只有1.8。。。
MICHAELYOU 2018-09-30
  • 打赏
  • 举报
回复
#打印100000以内的所有素数
k=0
ss_l=[2] #建立一个素数的list
for i in range(3,100000):
k=0
for j in ss_l: #只要可以整除素数就是合数
if i%j==0 :
k+=1
break
if k==0 :
ss_l.append(i)
print(ss_l)

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧