Pollard‘s p-1因子分解法——C语言实现

前置知识
smooth与powersmooth

光滑数(smooth number),或译脆数,是一个可以因数分解为小质数乘积的正整数
如果一个整数的所有素因子都不大于B,我们称这个整数是B-Smooth数
如果一个整数的所有素因子的对应指数次幂不大于B,我们称这个整数是B-powersmooth数
720(24∗32∗51)720(24∗32∗51) 是一个5-smooth数,6-smooth数,7-smooth数
但51<32<24=1651<32<24=16,所以它也是一个16-powersmooth数

费马小定理

当a是一个整数,p是一个质数时,有费马小定理:

ap−1≡1(modp)ap−1≡1(modp)

算法详解

1、我们的目的是分解出整数n的因子
2、如果我们可以找到一个与 n 不互质的整数 s,则可直接通过求gcd(s,n)gcd(s,n) 求得 n 的一个因子
证明: 因为 n与s不互质,那么n与s之间必然存在公因子,又因为n是质数相乘得到的,那么 gcd(n,s)gcd(n,s)一定是n的因子
3、我们的思路转化成如何求这样的s
4、假设p为n的一个未知的素数,单独的p是难以求出的,我们可以构造出含有因子p的数s,从而得到 gcd(s,n)gcd(s,n),即得到n的因子
5、如何求这种s?
6、我们构造 xx,xx 满足x≡1(modp)x≡1(modp),那么就有 gcd(x−1,n)gcd(x−1,n) 为n的因子
7、那如何得到这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值