幾種方法求10萬以內素數演算法的用時小測試
阿新 • • 發佈:2018-12-16
1、使用while迴圈,不對演算法做任何優化
import datetime
start = datetime.datetime.now()
a = 2
while a < 100000:
i = 2
while i < a:
if a % i == 0:
break
i += 1
#else:
#print(a)
a += 1
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)
總共用時90.5秒 2、使用for迴圈,也不做任何優化
import datetime
start = datetime.datetime.now()
for a in range(2,100000):
for i in range(2,a):
if a % i == 0:
break
usetime = (datetime.datetime.now() - start).total_seconds()
print(usetime)
#else:
#print(a,end=',')
用時55.9秒 3、使用for迴圈,進行開根號的優化
import math,datetime start = datetime.datetime.now() for a in range(2,100000): for i in range(2,int(math.sqrt(a))+1): if a % i == 0: break usetime = (datetime.datetime.now() - start).total_seconds() print(usetime) #else: #print(a,end=',')
用時0.419秒 4、使用for迴圈,在開根號的基礎上進行進一步優化
import datetime start = datetime.datetime.now() #print(2,end=',') for n in range(3,100000,2): if n > 10 and n % 10 == 5: continue else: for a in range(2,int(n**0.5)+1): if n % a == 0: break usetime = (datetime.datetime.now() - start).total_seconds() print(usetime) #else: #print(n,end=',')
用時0.37秒
可以看出演算法優化對程式執行效率的提升巨大,而且這裡使用for迴圈比while迴圈的效率要更高