用Python的串列方法求100000以內素數效率為什么那么低。我用數字整型普通計算方法時間大概為3.8秒,用串列存盤素數的方法時間為70+秒。這相差太大了。
uj5u.com熱心網友回復:
#列印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)
uj5u.com熱心網友回復:
不至于吧,我不到1秒就算出來了啊,我電腦主頻還只有1.8。。。uj5u.com熱心網友回復:
import timefrom 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)
uj5u.com熱心網友回復:
用串列方法,數字越大,串列里面的長度越長,也可以增加一個判斷,串列里面的值是否大于當前求判斷的值的平方根,超過就可以不用繼續運算了uj5u.com熱心網友回復:
用這個辦法: 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秒鐘
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/72004.html
標籤:其他開發語言
下一篇:機器學習(6)——邏輯回歸
