素数判定 Miller-Rabin 算法的实现 python

素数判定 Miller-Rabin 算法的实现

实验目的

通过实验掌握 Miller-Rabin 素数判定的算法。

实验原理

Miller-Rabin primality test | encyclopedia article by TheFreeDictionary

Miller-Rabin 素性测试或 Rabin-Miller 素性测试是一种概率素性测试: 一种判断给定数字是否可能为素数的算法,类似于费马素性检验和 Solovay-Strassen 素性测试。

强概要素数:对于一个给定的奇数整数 n > 2,我们把 n 写成 2 s ⋅ d + 1 2^s · d + 1 2sd+1,其中 s 和 d 是正整数,d 是奇数。让我们考虑一个整数 a,称为基数,如果这些同余关系中有一个成立,那么 n 就是一个很可能的素数:

  • a d ≡ 1 ( m o d    n ) a^d \equiv 1 (\mod n) ad1(modn)
  • a 2 r ∗ d ≡ − 1 ( m o d    n ) a^{2^r*d}\equiv-1 (\mod n) a2rd1(modn) for some 0 ≤ t < s 0 \leq t <s 0t<s

这个测试背后的想法是,当 n 是一个奇素数时,它通过测试是因为两个事实:

  • 根据费马小定理 a p − 1 ≡ 1 ( m o d    p ) a^{p-1} \equiv 1(\mod p) ap11(modp),(这个性质本身就定义了基于 a 的可能素数的较弱的概念,而费马检验就是基于这个概念) ;

  • 1模 n 的唯一平方根是1和-1。

基本原理:令 n 表示一个整数,假设存在整数 x 和 y 满足 x 2 ≡ y 2 ( m o d n ) x^2\equiv y^2(mod n) x2y2(modn),但 x ≠ ± y m o d    n x\neq\pm y\mod n x=±ymodn ,那么 n 是合数。而且 g c d ( x − y , n ) gcd(x-y,n) gcd(xy,n)给出了 n 的一个非平凡因子。

Miller-Rabin 素数判定: ( n − 1 = 2 k m , m 为 奇 数 ) (n-1=2^km,m 为奇数) (n1=2kmm)

  • 如果对所有的 r ∈ [ 0 , k − 1 ] r\in[0,k-1] r[0,k1],若 a m m o d    n ≠ 1 a^m\mod n\neq 1 ammod
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值