關於質數(素數)

2021-08-27 05:22:39 字數 3201 閱讀 4528

素數的演算法:

最基礎的演算法:

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之間的每...