|
本帖最后由 傻眼貓咪 于 2021-8-5 20:17 编辑
判定數值不大的質數的函數:
- def isPrime(num) -> bool:
- for i in range(2, num):
- if num%i == 0: return False
- return False
复制代码
如果想判定超大數值是否為質數時,可以用米勒-拉賓質數判定法:
- def isPrime(n, k=5): # 米勒-拉賓質數判定法
- from random import randint
- if n < 2: return False
- 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:
- s, d = s+1, d/2
- for i in range(k):
- x = pow(randint(2, n-1), d, 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
复制代码 |
|