pollard-rho&miller-rabin

今天学习pollard-rho和miller-rabin。

前置:

不管怎么说大力筛一遍2,3,5,7,11,13,17都是错不了的!

Miller-rabin

%%% Doggu太神啦!
前置技能:费马小定理
a p − 1 ≡ 1 ( M o d   p ) p 为 素 数 a^{p-1}{\equiv} 1(Mod\ p)p为素数 ap11(Mod p)p
证明:
g c d ( i , j ) = = 1 gcd(i,j)==1 gcd(i,j)==1&& i ∗ a ≡ j ∗ a ( M o d   p ) i*a{\equiv}j*a(Mod\ p) iaja(Mod p) i ≡ j ( M o d   p ) i{\equiv}j(Mod\ p) ij(Mod p)
1 , 2 , 3 , 4 , 5...... p − 1 {1,2,3,4,5......p-1} 1,2,3,4,5......p1构成一个完全剩余系
1 ∗ a , 2 ∗ a , 3 ∗ a . . . . . . ( p − 1 ) ∗ a {1*a,2*a,3*a......(p-1)*a} 1a,2a,3a......(p1)a亦构成
1 ∗ 2 ∗ 3.... ∗ p − 1 ≡ 1 ∗ a ∗ 2 ∗ a . . . . ( p − 1 ) ∗ a ( M o d   p ) 1*2*3....*p-1{\equiv}1*a*2*a....(p-1)*a(Mod\ p) 123....p11a2a....(p1)a(Mod p)
所以 a p − 1 ≡ 1 ( M o d   p ) a^{p-1}{\equiv}1(Mod\ p) ap11(Mod p)
那么要是我们发现 a p − 1 ! ≡ 1 ( M o d   p ) a^{p-1}{!\equiv}1(Mod\ p) ap1!1(Mod p)呢?
p就不是素数了!
然后再拿欧拉定理, a 2 ≡ 1 ( M o d   p ) a^{2}{\equiv}1(Mod\ p) a21(Mod p)时, a = + − 1 a=+-1 a=+1
显然, a p − 1 ≡ 1 ( M o d   p ) a^{p-1}{\equiv}1(Mod\ p) ap11(Mod p)
p − 1 = 2 k ∗ b p-1=2^k*b p1=2kb,那么对于任何一个 2 &lt; = i &lt; = k 2&lt;=i&lt;=k 2<=i<=k,若 a 2 i ∗ b ≡ 1 ( M o d p ) a^{2^i*b}{\equiv}1(Mod p) a2ib1(Modp) a 2 i − 1 ∗ b ! ≡ + − 1 ( M o d   p ) a^{2^{i-1}*b}{!\equiv}+-1(Mod\ p) a2i1b!+1(Mod p)
p也就不是质数了!
当然需要注意的是这是一个证不是质数的算法,如果说“证不出它不是质数”并不能证明“它就是质数”,而是“我觉得它是个质数”,当然a取得够多也差不多。

pollard-rho

要干嘛

我们想分解一个数为质因数

怎么干

首先不妨令 a = p 1 ∗ p 2 ∗ c a=p_1*p_2*c a=p1p2c(p是质数),那么显然 p 1 &lt; n p_1&lt;{\sqrt{n}} p1<n ,那么[1,n-1]中是p的倍数的数至少有 n {\sqrt{n}} n 个,期望下我们随机取 n 4 {\sqrt[4]{n}} 4n 也就是 n 1 4 n^{\frac{1}{4}} n41的数,就会有一个是p的倍数
也就是说如果我们每次随机取一个数,它有
上面是假的。
一个自习室口胡了40min可算是大概搞懂了为啥。
如果用真随机数随的话是肯定要完蛋的。
我们考虑分别在两个膜意义下考虑:膜p(N的最小质因子),膜N
那么在两个膜意义下, f ( x ) = x 2 ( M o d   p ) f(x)=x^2(Mod\ p) f(x)=x2(Mod p)分别存在 p \sqrt{p} p N \sqrt{N} N 的循环节。
我们希望获得p的倍数,那么考虑两个值,如果它们在膜p意义下相同,但是在膜N意义下不同,那么它们的差值一定是p的倍数。
那么每次我们让一个点走两步,另一个点走一步,在 p \sqrt{p} p 的步数下它们膜p意义下相同,但是这两个数在膜N意义下是不同的。那么在膜p意义下相同了的话,它们的差值就是p的某个倍数,获得因子,完成。
难以理解?
两个zou
左边那个是膜p意义下用f的取值,右边是膜N意义下的取值。
事实上左边那个膜p意义下的取值循环只是用于证明复杂度的,我们并不显性地知道这两个快点和慢点膜p意义下是多少(废话,你又不知道p),但是你知道这两个的差值——差值与N的gcd为0意味着膜p意义下没有重合。 p \sqrt{p} p 步后你的快点和慢点膜p意义下就相同了——再次注意!这两个点膜N意义下不相同!——那么两者的差值就是p的倍数了。分解成功。
直接用随机数是 N \sqrt{N} N 的复杂度,大点小点作差用上面的循环论证可以得到复杂度是 p \sqrt{p} p .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值