Solovay-Stassen素性检验 python
时间: 2023-07-06 10:41:17 浏览: 94
Solovay-Stassen素性检验是一种用于判断一个大整数是否为素数的方法。下面是一个用Python实现的Solovay-Stassen素性检验的代码示例:
```python
import random
def jacobi_symbol(a, n):
"""
计算雅可比符号
"""
if n % 2 == 0:
raise ValueError("n must be odd")
s = 0
while n % 2 == 0:
n //= 2
s += 1
if s % 2 == 0:
e = 1
elif a % 8 in [1, 7]:
e = 1
elif a % 8 in [3, 5]:
e = -1
if n % 4 == 3 and a % 4 == 3:
e = -e
if n == 1:
return e
else:
return e * jacobi_symbol(n, a % n)
def solovay_stassen(n, k=10):
"""
Solovay-Stassen素性检验
"""
if n == 2 or n == 3:
return True
if n % 2 == 0:
return False
for i in range(k):
a = random.randint(2, n-1)
if pow(a, (n-1)//2, n) != jacobi_symbol(a, n) % n:
return False
return True
```
其中,`jacobi_symbol`函数用于计算雅可比符号,`solovay_stassen`函数用于进行Solovay-Stassen素性检验。参数`n`为待检验的大整数,参数`k`为检验次数,一般取10次即可。函数返回`True`表示`n`可能是素数,返回`False`表示`n`一定不是素数。
阅读全文