大整数分解算法 之 Williams's p+1 算法原理

基础知识

卢卡斯数列和卢卡斯序列

卢卡斯数列,英文名:Lucas numbers
卢卡斯数列与斐波那契数列相似,除前两项外,每个卢卡斯数都为前两项之和。
而前两项卢卡斯数是L0=2L1=1,不同于前两个斐波那契数F0F1
因此,卢卡斯数可以定义如下:

f(x)={2if n=0;1if n=1;Ln1+Ln2if n>1.

尽管在定义上密切相关,但卢卡斯数和斐波那契数显示出截然不同的特性。
卢卡斯序列,英文名: Lucas sequences
这是一个特殊的卢卡斯数列,不要与卢卡斯数列混淆
在数学中,卢卡斯数列Un(P,Q)Vn(P,Q)是满足递归关系的某些常数递归 整数序列

xn=Pxn1Qxn2

递归关系:

U0(P,Q)=0,U1(P,Q)=1,Un(P,Q)=PUn1(P,Q)QUn2(P,Q) for n>1,

V0(P,Q)=2,V1(P,Q)=P,Vn(P,Q)=PVn1(P,Q)QVn2(P,Q) for n>1,

在这里,PQ是固定整数,任何满足这种递归关系的序列都可以表示为卢卡斯序列的线性组合 Un(P,Q)Vn(P,Q)
它的一堆其他性质参考: https://en.wikipedia.org/wiki/Lucas_sequence

算法原理

选择大于2的整数A,用其生成一个卢卡斯序列:
1、V0=2,V1=a,Vj=aVj1Vj2
2、对于任意的奇素数 p,只要满足M是p(D/p)的倍数,即 p(D/p)|M,那么就有p|gcd(VM2,n) ,其中(Dp)为勒让德符号、D=a24 ; (原理我还尚未知道...)
3、那么,我们就可以通过gcd(VM2,n)求得n的因子。
4、当(D/p)=1,所表示的就是Williams's p+1算法; 若(D/p)=+1,则该算法退化为 Pollardp1算法的慢速版本 ,而我们希望(D/p)=一1,但因为预先不知道P的值,所以可能要尝试多个a的值 ,从而得到 n的因子
5、下面求计算V的第M个值的算法

x=B y=(B^2-2) mod N for each bit of M to the right of the most significant bit if the bit is 1 x=(x*y-B) mod N y=(y^2-2) mod N else y=(x*y-B) mod N x=(x^2-2) mod N V=x

6、Williams's p+1 算法分解n的python脚本

def mlucas(v, a, n): """ Helper function for williams_pp1(). Multiplies along a Lucas sequence modulo n. """ v1, v2 = v, (v**2 - 2) % n for bit in bin(a)[3:]: v1, v2 = ((v1**2 - 2) % n, (v1*v2 - v) % n) if bit == "0" else ((v1*v2 - v) % n, (v2**2 - 2) % n) return v1 for v in count(1): for p in primegen(): e = ilog(isqrt(n), p) if e == 0: break for _ in xrange(e): v = mlucas(v, p, n) g = gcd(v-2, n) if 1 < g < n: return g # g|n if g == n: break

参考: https://www.jsjkx.com/CN/article/openArticlePDF.jsp?id=8765
https://en.wikipedia.org/wiki/Williams's_p_%2B_1_algorithm
https://ctf-wiki.org/en/crypto/asymmetric/rsa/rsa_module_attack/#p-1_1
https://blog.csdn.net/m0_62506844/article/details/125774485


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/17069456.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(1055)  评论(2编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示