有没有更好的求质数办法
质数 = []def 求质数(到几):
a = 1
b = 1
c = 0
for x in range(1, 到几 + 1):
c = 0
a = a + 1
for x in range(1, a + 1):
if a % b == 0:
c = c + 1
b = b + 1
if c == 2:
质数.append(a)
b = 1
c = 0
print(质数)
求质数(10000)
程序代码:
def isPrime(n, k=5): # 運用米勒-拉賓質數判定法,簡單說就是刪除法,判斷參數是否為質數
from random import randint
if n < 2: return False # 小於2都不是質數,就不用往下執行了
for p in [2,3,5,7,11,13,17,19,23,29]: # 運用小質數把非常大的質數變小,節省運算時間和記憶體
if n % p == 0: return n == p
s, d = 0, n-1
while d % 2 == 0: # 運用偶數刪除法,因為除了2本身偶數以外,全部質數都是奇數
s, d = s+1, int(d/2)
for i in range(k):
x = pow(randint(2, n-1), d, n) # 假設p和q為質數,p!=q,如果n=p*q,那麼p或q肯定有一方小於平方根(n)
if x == 1 or x == n-1: continue
for r in range(1, s):
x = (x * x) % n
if x == 1: return False
if x == n-1: break
else: return False
return True
def prime(num): # 這裡是根據你的題目所定制的函數,找出所有num以內的質數
for i in range(num+1):
if isPrime(i):
yield i # 切記!這裡我不是用return,如要得到所有輸出質數,必須加上list,set或tuple...
print(list(prime(100000))) # 用list把所有質數列出
[此贴子已经被作者于2021-8-2 18:58编辑过]