判断素数问题(费马小定理,蒙哥马利模幂)

题目描述

给定多个大于 1 的整数,判断是否为素数

输入

输入多行,每行是一个大于 1 的整数或字母 q

输出

对于每一行输入:

如果该行是正整数,那么输出一行,输出内容为 T 或 F,代表这个正整数是或不是素数;

如果该行是字母 q,则退出程序

样例输入

8888
123
29
q

样例输出

F
F
T

解法

对待判断数p,取几个素数a验证a^(p-1)与1模p同余,根据费马小定理若不同余,则p为合数,因此通过多取不同的素数进行检验能够极大概率保证准确率。

而同时使用蒙哥马利模幂来加速a^(p-1)mod p 的运算过程。

代码如下:

def montgomery(base, quo, mod):
    c = 1
    while quo > 0:
        c = c * (1 if quo % 2 == 0 else base) % mod
        quo >>= 1
        base = base * base % mod
    return c == 1


def isPrime(x):
    if x == 2 or x == 3 or x == 5 or x == 7 or x == 11 or x == 13 or x == 17 or x == 19 or x == 23 or x == 29 or x == 31:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值