1. 程式人生 > >幾種方法求10萬以內素數演算法的用時小測試

幾種方法求10萬以內素數演算法的用時小測試

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迴圈的效率要更高