大整数分解算法 之 Pollard's p-1 算法原理
"一切以解题为目的的抄代码都是耍流氓!!!"
前置知识
smooth与powersmooth
光滑数(smooth number),或译脆数,是一个可以因数分解为小质数乘积的正整数
如果一个整数的所有素因子都不大于B,我们称这个整数是B-Smooth数
如果一个整数的所有素因子的对应指数次幂不大于B,我们称这个整数是B-powersmooth数
是一个5-smooth数,6-smooth数,7-smooth数
但,所以它也是一个16-powersmooth数
费马小定理
当a是一个整数,p是一个质数时,有费马小定理:
算法详解
1、我们的目的是分解出整数n的因子
2、如果我们可以找到一个与 n 不互质的整数 s,则可直接通过求 求得 n 的一个因子
证明: 因为 n与s不互质,那么n与s之间必然存在公因子,又因为n是质数相乘得到的,那么 一定是n的因子
3、我们的思路转化成如何求这样的s
4、假设p为n的一个未知的素数,单独的p是难以求出的,我们可以构造出含有因子p的数s,从而得到 ,即得到n的因子
5、如何求这种s?
6、我们构造 , 满足,那么就有 为n的因子
7、那如何得到这样的x?
8、转化 Fermat 小定理,则有,对比,显然只要求出p-1,就能得到 x 的值,但p未知!!!,但我们可以构造的倍数,进而达到相同的效果
9、如何构造(p-1)的倍数?
10、其实(p-1)的B-powersmooth数(设为B)的阶乘就是(p-1)的倍数
证明如下:
因为,且 并且这些质数幂互不相等,那么B的阶乘一定会整除(p-1)
11、所以,我们只需要找到一个合适大小的B,就可以在多项式时间计算出结果
12、找到B后,回溯:
此时,求出的d即为整数n的一个因数
13、在一些其他文案中,我发现对于(p-1)的倍数的选取,他们并没有使用B!
而是选取了一个类似这样的结构:
不是很懂这个结构...不过无所谓,其他地方还是一样的
对抗Pollard's p-1的方法
B必须满足"大于p-1的所有因子",如果p−1的因子很大,选择小的B会造成算法求解失败,选择足够大的B会增加算法成功的概率,但那样的话算法的复杂度不比试除法好
为了抵抗Pollard的p-1因子攻击,我们通常选取两个大素数,,令、,这样得到的模数n=pq能够抵抗攻击
14、Pollard's p-1 算法:
一些小知识
什么是多项式时间:
几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(na)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(an)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
参考 https://www.zhihu.com/question/24653072
参考:
https://blog.csdn.net/weixin_46395886/article/details/114434642
https://blog.csdn.net/weixin_42251364/article/details/95462358
例题
题目描述:
思路
p-1光滑
exp
__EOF__

本文链接:https://www.cnblogs.com/lordtianqiyi/articles/17069448.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现