素數的演算法:
最基礎的演算法:
n = int(input('>>>'))
for i in range(2, n):
if n % i == 0:
print(n, '可以被', i, '整除')
break
else:
print(n, '是乙個質數')
改進演算法,通過開方縮小整除範圍:
n = int(input('>>>'))
for i in range(2, int((n**0.5)+1)):
if n % i == 0:
print(n, '可以被', i, '整除')
break
else:
print(n, '是乙個質數')
通過剔除偶數再次縮小計算範圍
n = int(input('>>>'))
for i in range(3, int((n**0.5)+1),2):
if n % i == 0:
print(n, '可以被', i, '整除')
break
else:
print(n, '是乙個質數')
引入datetime模組來統計演算法耗時
import datetime
start = datetime.datetime.now()
print(2, end=', ')
count = 1
for i in range(3, 100000, 2):
for j in range(2, int((i**0.5)+1)):
if i % j == 0:
break
else:
count += 1
# print(i, end=', ')
delta = (datetime.datetime.now() - start).total_seconds()
print(delta)
引入time模組來統計演算法耗時
import time
start = time.clock()
# print(2, end=', ')
count = 1
for i in range(3, 100000, 2):
for j in range(2, int((i**0.5)+1)):
if i % j == 0:
break
else:
count += 1
# print(i, end=', ')
end = time.clock()
delta = end - start
print(delta)
列印10萬以內的所有質數
print(2, end=', ')
for i in range(3, 100000, 2):
for j in range(2, int((i**0.5)+1)):
if i % j == 0:
break
else:
print(i, end=', ')
演算法改進,刪除所有大於10之後,最後一位是5的數字
import time
start = time.clock()
count = 1
for x in range(3, 100000, 2):
if x > 10 and x % 10 == 5:
continue
for i in range(3, int(x ** 0.5) + 1, 2):
if x % i == 0:
break
else:
count += 1
end = time.clock()
delta = end - start
print(count)
print(delta)
演算法改進,與6取模(沒搞懂這個演算法的原理,先加上吧),
import time
start = time.clock()
count = 1
for x in range(3, 100000, 2):
if x % 6 != 1 and x % 6 != 5:
continue
for i in range(3, int(x ** 0.5)+1, 2):
if x % i == 0:
break
else:
count += 1
end = time.clock()
delta = end - start
print(count)
print(delta)
通過引用列表來改進**
另外演算法改進
import time
ls = [2]
start = time.clock()
for i in range(3, 100000, 2):
for j in ls:
if i % j == 0:
break
else:
end = time.clock()
print(end - start)
print(ls)
引入math模組
import math
import time
ls =
start = time.clock()
count = 0
flag = false
for x in range(2, 100000):
for i in ls:
if x % i == 0:
flag = true
break
if i >= math.ceil(math.sqrt(x)):
flag = false
break
if not flag:
count += 1
end = time.clock()
print(end - start)
print(count)
輸出質數 素數
gps平台 建設 軟體開發 系統運維,找森大網路科技!來自森大科技官方部落格 考察知識點 continue 跳過本次迴圈,執行下一次迴圈,break 結束當前迴圈 質數百科名片 質數又稱素數。指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。因為合數是由若干個質數相乘而得來的...
Python求質數 素數
先寫乙個裝飾器d1.py,為了測試執行時間 from functools import wraps import time deff1 func wraps func deff2 begin time.time func end time.time print cost end begin retu...
判斷素數與產生素數表(質數)
素數在小學數學也叫質數 方法 所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2 16的任一整數整除。因此判斷乙個整數m是否是素數,只需把m被2 m 1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。另外判斷方法還可以簡化。m不必唄2 m 1之間的每...