[关闭]
@ljt12138 2018-05-19T19:49:36.000000Z 字数 1201 阅读 1271

Pollard-rho算法简要分析

数论


概述

Pollard-rho算法是质因数分解的一种有效的蒙特卡洛算法,可以在期望的复杂度内找到合数的一个因数。其核心思想就是随机的选取,试图找到一个。但直接利用反复随机的方法是行不通的,为了提高效率,Pollard-rho算法依靠“生日悖论”来找到一个因数。

“生日悖论”

生日悖论是指个人两两生日不同的概率,随着的增长下降的非常快。如果在个数中随机选取个,其两两之差全不为一个常数的概率为,因而如果通过两两之差去“碰”一个数,只需要期望次。考虑如果一个数的最小质因子是,其小于的倍数有个,如果我们随机选取个数,两两作差寻找,碰到的概率为,这样只需要期望次就可以找到一个因数。

弗洛伊德判环

考虑如何在的附加空间内沿着环走一周,考虑用两个指针,一个每次移动一步,一个每次移动两步,其位置差每次增加,直到位置差为环长即两个指针相遇,则他们刚好绕环一周,且他们取遍了每一种可能的位置差。

Pollard-rho算法

Pollard-rho算法的核心是构造一个“随机的”函数:

我们要用这个函数生成随机数去“碰”一个质因数的倍数,设这个集合为

注意到在模意义下必然会形成一个环。考虑,有一个因子。因而如果,就有。而根据欧几里得算法说明了如果一个数与有公因子,那么模后也有。因为形成环,立刻可以得到对于任意的,如果满足,即他们在环上的位置差相等,那么

换言之,环上的二元组被其之间的距离划分为了若干个个等价类,为环长。那么这显然可以用弗洛伊德判环快速的完成,事实上,弗洛伊德判环每一次移动,都相当于进行了次两两比较。因而最终复杂度就是

算法流程就是,每次随机一个初始解,通过进行弗洛伊德判环,直到找到一个约数,或者算法失败。如果找到一个约数,递归的分解两边。为了防止大素数导致时间退化,需要先用素数测试判断是否是素数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注