首页 > 其他分享 >Miller-Rabin 和 Pollard-Rho 小记

Miller-Rabin 和 Pollard-Rho 小记

时间:2024-07-05 20:23:12浏览次数:11  
标签:gcd Miller 质数 Pollard Rho Rabin

Miller-Rabin 可以帮助我们快速判断一个大数是不是质数,现在已经有了确定性算法。在 \(2^{64}\) 范围内,我们可以快速地进行确定性判素。

二次校验定理:若 \(p\) 为奇质数,则 \(a^x \equiv 1 \pmod p\) 的解为 \(x = ±1\)。

我们有这样的流程:

令 \(d = p - 1\),然后不断检验 \(a^d\),并令 \(d \leftarrow \dfrac{d}{2}\),直到 \(d\) 为奇数(注意这时要再检验一次)。

容易想到,我们可以随机一些 \(a\) 并对其进行判断。可以证明的是,取前 12 个质数作为 \(a\) 进行校验就可以在 \(2^{64}\) 的范围内的确定一个数的素性了。

Pollard-Rho 可以帮助我们快速求出一个合数 \(n\) 的质因子。它采用随机算法,

一开始时,\(t = 0\),然后每次让 \(t \leftarrow t^2 + c\;\text{mod}\;p\),其中 \(c\) 为一个随机的常数。

这样得到的一群随机数会成环,样子很像 rho,所以得名 Pollard-Rho。

我们假设 \(n\) 最小的质因子为 \(m\),若连续两次生成的 \(t\) 的差的绝对值在模 \(m\) 意义下的值相同,那么这个差和 \(n\) 的 gcd 就是一个 \(n\) 的非平凡因子,由生日悖论,需要的 \(t\) 的个数是 \(O(\sqrt{m})\) 的,也就是 \(O(n^{\frac{1}{4}})\) 的,因为 \(m \leq \sqrt{n}\)。

为了优化这个过程,我们采用倍增法,即枚举步长,在每段结尾算一遍 \(\prod |t_i - t_0|\) 与 \(n\) 的 gcd,并在每个步长的过程中每 \((2^k - 1)\) 次生成 \(t\) 后求一遍 gcd,这里一般取 \(k = 7\)。

如果 gcd > 1,那么我们就成功找到了 \(n\) 的一个非平凡因子,直接返回其值即可。

标签:gcd,Miller,质数,Pollard,Rho,Rabin
From: https://www.cnblogs.com/abcdeffa/p/18286519

相关文章

  • Miller Rabin算法判定质数(OI向)
    前言:本篇不太适合那些对数学证明要求严格的Oier,然后本人也是蒟蒻,主要写给自己回顾用的MillerRabin算法能快速的判断一个数是否为质数,作为一个数学算法它具有一定的玄学成分,但是在OI中通过一些手段可以使其达到100%正确。先让我们对比一下一般算法书教的2种关于质......
  • Rhodamine B PEG Rhodamine B,罗丹明聚乙二醇罗丹明,分子量:1k,2k,3.4k,5k
    西安凯新生物作为高分子PEG供应商WMJ为大家介绍(RhodamineBPEGRhodamineB),试剂仅用于科学研究,不可用于人类,非药用,非食用。分子量:1k,2k,3.4k,5k,10k,20k(可按需定制)中文名称:罗丹明聚乙二醇罗丹明英文名称:RhodamineBPEGRhodamineB结构式:物理性质:外观特点:固体、粉末端......
  • 学习笔记:Miller-Rabin 与 Pollard-Rho
    Miller_Rabin首先考虑方程\(x^2\equiv1\pmodn\)。可以写成\((x+1)(x-1)=kn\)。当\(n\)为素数时,只可能\(n\midx+1\)或\(n\midx-1\),反之合数不满足。得到结论:在模素数意义下,一个数的平方等于\(1\)当且仅当这个数同余于\(1\)或\(-1\)。我们知道,......
  • 中国移动光猫Fiberhome HG6145F获取超级管理员密码和解决第四号口不能用的问题
    第一步获取光猫MAC地址你看光猫背后就行了,如果没有,就用命令:arp-a192.168.1.1第二步开启telnet访问地址:http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=你的Mac地址,要求全大写如果成功,网页会显示:telnet开启第三步进入telnet地址还是在电脑用cmd输入:t......
  • 【模板】分解质因数 Pollard-Rho
    参见洛谷模板题题解,这里只有代码实现。一些强数据参考(输出了最大质因子)79223372036854775783Prime9223371994482243049303700049392232532901085832072097143214748364822147483647Prime21471175694633721417005691289#include<bits/stdc++.h>usingnamespace......
  • Miller–Rabin 素性测试
    Miller–Rabin素性测试(Miller–Rabinprimalitytest)是进阶的素数判定方法。它是由Miller和Rabin二人根据费马小定理的逆定理(费马测试)优化得到的。因为和许多类似算法一样,它是使用伪素数的概率性测试,我们必须使用慢得多的确定性算法来保证素性。然而,实际上没有已知的数字通过......
  • 52 Things: Number 35: Give the rough idea of Pollard rho, Pollard "kangaroo" and
    52Things:Number35:GivetheroughideaofPollardrho,Pollard"kangaroo"andparallelPollardrhoattacksonECDLP.52件事:第35件:大致了解Pollardrho、Pollard“袋鼠”和平行的Pollardrho对ECDLP的攻击。 Thisisthelatestinaseriesofblogpoststoadd......
  • 数论——Pollard-Rho 学习笔记
    数论——Pollard-Rho学习笔记非平凡因数:\(n\)除了\(1\)和\(n\)以外的因数。Pollard-Rho算法是一种用于快速分解非平凡因数的算法。Pollard-Rho能在期望复杂度\(\mathcalO(n^{1/4})\)的时间内找到\(n\)的最小的非平凡因数。而根据Pollard-Rho,我们可以用来加速质......
  • 数论——Fermat素性检验、Miller-Rabin素性检验
    数论——Fermat素性检验、Miller-Rabin素性检验试除法与素性测试试除法:所有的试除法,无论是\(\mathcalO(n)\)的还是\(\mathcalO(\sqrtn)\)的,其本质都相同:即找\(n\)可能存在的因子\(k\),判断\(k\midn\)。素性测试:旨在不用分解因数的方式,判断一个数是否为质数;素性......
  • Miller Rabin素数判定
    MillerRabin素数判定llqmul(lla,llb,llmod)//快速乘{llc=(ld)a/mod*b;llres=(ull)a*b-(ull)c*mod;return(res+mod)%mod;}llqpow(lla,lln,llmod)//快速幂{llres=1;while(n){if(n&1)res=qmul(res,a,mod);......