有没有更好的求质数办法
质数 = []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编辑过]