Pollard's Rho
来源:     阅读:492
织梦模板店
发布于 2021-03-20 18:59
查看主页

这个博客讲的非常清晰

Pollard's Rho算法用于处理整数分解,期望的时间复杂度只有O(N^{\frac 1 4})。给出一个整数N,返回一个N的质因数。
Pollard's Rho涉及到很多概率的问题,本质就是随机选择一个数,假如这个数,是N的质因数那么就返回这个数。否则随机选取另一个数。
首先来看一个问题,1~100内的数,随机选择一个数x=5的概率是多少?1/100,随机选择两个数x,y,|x-y|=5的概率是多少?1/50。
生日悖论,从1~100选择k个数中,存在两个数差的绝对值=5的概率是多少?这个问题的概率是指数增长的。当k=10的时候,这个概率就达到了百分之50。
假设N的质因数是p,q直接选到p或者q的概率是2/N,但是通过我们选择p,2p,3p...q,2q,3q...的概率就非常大了。因而我们使用gcd(x,n)=p当x是p或者q的倍数时我们即可以将p选出来了。
1和3很容易实现,问题是2我们选择出k个数,需要保存每个数,对任意两个数计算。因而采用一种伪随机算法f(x) = (x*x+a)%N。a可以是伪随机数,但是伪随机数居然也有循环节,,f(x)若干步后肯定会进入一个循环。假如我们让x与y做差,当x和y都进入循环时,整个程序就卡死了。因而需要判环。让x走一步,y走两步当x=y的时候说明进入同一个循环。这时需要更换f函数或者者随机种子。
刘汝佳先生说:想象一下,假设有两个小孩子在一个“可以无限向前跑”的跑道上赛跑,同时出发。但其中一个小孩的速度是另一个的两倍。假如跑道是直的,跑得快的小孩永远在前面;但假如跑道有环,则跑得快的小孩将“追上”跑得慢的小孩。
这叫做“floyd判圈”算法。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 windows
相关推荐
浅谈 linux 被入侵排查方法
工业互联网迎新机遇,工业APP前景广阔,发展态势良好!
考证下载课件的同学,你们必须掌握百度云网盘这些技巧
弹指间,重温几个设置满屏的小技巧
第1篇 Linux多线程
首页
搜索
订单
购物车
我的