numbers - 费马素数检验
问题描述
据我了解,对于所有卡迈克尔数,费马的素数检验都应该失败。这似乎可以很好地识别素数,但是我测试的所有卡迈克尔数都返回了高 k 值的“复合”,这是出乎意料的。
谁能看到我犯了什么错误?
def mod_exp(x, y, N):
if y == 0:
return 1
z = mod_exp(x, y//2, N)
if y % 2 == 0:
return z*z % N
else:
return x * z*z % N
def fermat(N,k):
isPrime = 'prime'
for i in range(k):
a = random.randint(1, N - 1)
if mod_exp(a, N - 1, N) != 1:
isPrime = 'composite'
return isPrime
解决方案
推荐阅读
- python - 如何从终端中的先前运行中获取变量值?
- amazon-web-services - 如何修复错误在使用 Amazon 的 S3 和 Cloudfront 时,请求的资源上不存在“Access-Control-Allow-Origin”标头
- google-cloud-platform - 云数据融合上次运行时间作为参数
- javascript - 如何通过 jquery 使用平滑滚动并使用类?
- excel - 将 SEQUENCE 作为输入传递给 SEQUENCE 公式的 rows 参数
- java - 有没有其他方法可以解决这个问题?
- linux - 如何在linux中将当前目录设为主目录
- java - 使用 PostgreSQL 'crypt()' 函数选择为布尔值
- javascript - 如何在 Mongoose 中确定模型所属的集合
- android - 如何在android bt堆栈中禁用旧版配对