分解因子

Pollard’s p-1 算法

Base concepts

  • 对于一个想要分解因子的整数 n
  • 如果我们可以找到一个与 n 不互质的整数 s ,则可直接通过求 gcd(s,n)gcd(s,n)gcd(s,n) 求得 n 的一个因子
  • 这样的 sss 如何得到?
  • 考虑到如下事实:
    • 若 p 为 n 的一个素因子

      • p未知,希望构造出一个含有因子 p 的数 s,则可通过求gcd(s,n)gcd(s,n)gcd(s,n)求得 n 的因子
    • x≡1(modp)  ⟹  p∣gcd(x−1,n)x \equiv 1 \pmod p \implies p | gcd(x-1,n)x≡1(modp)⟹p∣gcd(x−1,n)
    • 如何在只知道 n 的有限条件下得到这样的 x?
      • 考虑 Fermat 小定理,必有2p−1≡1(modp)2^{p-1}\equiv 1\pmod p2p−1≡1(modp)
      • 但 p 未知!
      • 考虑构造一个(p−1)(p-1)(p−1)的倍数
        • 假定对每一个素数幂 q∣(p−1)q|(p-1)q∣(p−1), 有q≤Bq\leq Bq≤B
        • 则可得到(p−1)(p-1)(p−1)的一个倍数 B!B!B!
      • 于是,x≡2B!(modn)x\equiv 2^{B!}\pmod nx≡2B!(modn)
      • 由于p∣np|np∣n,有x≡2B!≡1(modp)x\equiv 2^{B!}\equiv 1\pmod px≡2B!≡1(modp)
        • 依据:Fermat 小定理,(p−1)∣B!(p-1)|B!(p−1)∣B!
  • s=x−1s=x-1s=x−1
  • d=gcd(s,n)d=gcd(s,n)d=gcd(s,n)即为nnn的一个非平凡因子(除非s=0)

Algorithm

Inputs #1: n: a composite number
Inputs #2: B: a smoothness bound
Outputs: a nontrivial factor of nnn or failure

Pollard p-1 Factoring Algorithm(n,B):
  a←2B!(modn)a\leftarrow 2^{B!}\pmod na←2B!(modn)
  d←gcd(a−1,n)d\leftarrow gcd(a-1,n)d←gcd(a−1,n)
  if 1&lt;d&lt;n1&lt;d&lt;n1<d<n then return d
  else return failure

Pollard ρ\rhoρ 算法

Base concepts

  • 同样是希望找到一个 s, 然后通过求gcd(s,n)gcd(s,n)gcd(s,n)来求得因子
  • 但 s 的求法不同
    • 有如下事实:设 p 为 n 的最小素因子,假定存在2个整数x,x′∈Z,x,x'\in \mathbb{Z},x,x′∈Z,使得x≠x′x\neq x'x̸​=x′且x≡x′(modp)x\equiv x'\pmod px≡x′(modp)
      则p≤gcd(x−x′,n)&lt;np\leq gcd(x-x',n)&lt;np≤gcd(x−x′,n)<n,即为所需因子
    • s 的获取关键在于x,x′x,x'x,x′的选取
  • x,x′x,x'x,x′的选取?
    • 假定通过先选择一个随机子集X∈ZnX\in \mathbb{Z}_nX∈Zn​来分解n,然后对其中所有不同的x,x′x,x'x,x′计算gcd(x−x′,n)gcd(x-x',n)gcd(x−x′,n),这个方法能成功当且仅当映射x↦smod&ThinSpace;&ThinSpace;px\mapsto s \mod px↦smodp对于x∈Xx\in Xx∈X得到至少一个碰撞

      • 根据生日悖论,如果∣X∣≈1.17p|X|\approx 1.17\sqrt p∣X∣≈1.17p​,那么至少存在一个碰撞的概率为50%
      • 但由于 p 未知,不能显示计算xmod&ThinSpace;&ThinSpace;px \mod pxmodp,这意味着在找到 n 的一个因子前,需要计算超过(∣x∣2)&gt;p2\binom{|x|}{2}&gt;\frac{p}{2}(2∣x∣​)>2p​次gcd
  • Pollard ρ\rhoρ 算法如何对这一技巧进行了优化
    • 考虑一种“类似”随机映射x↦f(x)mod&ThinSpace;&ThinSpace;nx\mapsto f(x)\mod nx↦f(x)modn,其中fff为一个具有整数系数的多项式

      • 例如f(x)=x2+af(x)=x^2+af(x)=x2+a, 通常取a=1a=1a=1
    • 设x1→Znx_1\rightarrow \mathbb{Z}_nx1​→Zn​,可得到序列x1,x2,...(xi+1=f(xi)mod&ThinSpace;&ThinSpace;n)x_1,x_2,...\quad\quad (x_{i+1}=f(x_i)\mod n)x1​,x2​,...(xi+1​=f(xi​)modn)
    • 在此序列中寻找xi,xjx_i,x_jxi​,xj​使得gcd(xj−xi,n)&gt;1gcd(x_j-x_i,n)&gt;1gcd(xj​−xi​,n)>1
      • 每次计算序列中的一个新项xjx_jxj​,要对所有i&lt;ji&lt;ji<j计算gcd(xj−xi,n)gcd(x_j-x_i,n)gcd(xj​−xi​,n)
    • 然而,gcd计算次数可以大大减少
      • 有如下事实:xi≡xj(modp)&ThickSpace;⟹&ThickSpace;f(xi)≡f(xj)(modp)&ThickSpace;⟹&ThickSpace;xi+1≡xj+1(modp)x_i\equiv x_j\pmod p \implies f(x_i)\equiv f(x_j)\pmod p\implies x_{i+1}\equiv x_{j+1}\pmod pxi​≡xj​(modp)⟹f(xi​)≡f(xj​)(modp)⟹xi+1​≡xj+1​(modp)
    • 于是,如果(xi,xj)(x_i,x_j)(xi​,xj​)关于 p 同余,则(xi+1,xj+1),(xi+2,xj+2),(xi+3,xj+3)⋯(x_{i+1},x_{j+1}),(x_{i+2},x_{j+2}),(x_{i+3},x_{j+3})\cdots(xi+1​,xj+1​),(xi+2​,xj+2​),(xi+3​,xj+3​)⋯均关于 p 同余
    • 为了简化和改进算法,通过取j=2ij=2ij=2i来寻找碰撞
      • 因为不一定要找出这种类型的第一个碰撞
  • 事实上,序列一定会从某处进入循环,因为 p 是一个有限数
  • 用顶点集Zp\mathbb{Z}_pZp​构造一个图 G,从点ximod&ThinSpace;&ThinSpace;px_i \mod pxi​modp向点xi+1mod&ThinSpace;&ThinSpace;px_{i+1} \mod pxi+1​modp做一条有向边,可知 G 看起来像希腊字母ρ\rhoρ
    • “尾巴”:x1mod&ThinSpace;&ThinSpace;p→x2mod&ThinSpace;&ThinSpace;p→⋯→ximod&ThinSpace;&ThinSpace;px_1\mod p\to x_2\mod p\to \cdots\to x_i\mod p x1​modp→x2​modp→⋯→xi​modp
    • “环”:ximod&ThinSpace;&ThinSpace;p→xi+1mod&ThinSpace;&ThinSpace;p→⋯→xjmod&ThinSpace;&ThinSpace;p=ximod&ThinSpace;&ThinSpace;px_i\mod p\to x_{i+1}\mod p\to \cdots\to x_j \mod p=x_i\mod p xi​modp→xi+1​modp→⋯→xj​modp=xi​modp

Algorithm

Input #1: n: a composite number
Input #2: x1x_1x1​: the starting number
Output: a nontrivial factor of nnn or failure

Pollard ρ\rhoρ Factoring Algorithm(n,x1x_1x1​)
external fff
  x←x1;&ThickSpace;x′←f(x)mod&ThinSpace;&ThinSpace;n;&ThickSpace;d=gcd(x−x′,n)x\leftarrow x_1;\;x'\leftarrow f(x)\mod n;\;d=gcd(x-x',n)x←x1​;x′←f(x)modn;d=gcd(x−x′,n)
while p=1p=1p=1:
   x←f(x)mod&ThinSpace;&ThinSpace;nx\leftarrow f(x)\mod nx←f(x)modn
   x′←f(x′)mod&ThinSpace;&ThinSpace;n;&ThickSpace;x′←f(x′)mod&ThinSpace;&ThinSpace;nx'\leftarrow f(x')\mod n;\;x'\leftarrow f(x')\mod nx′←f(x′)modn;x′←f(x′)modn
   d←gcd(x−x′,n)d\leftarrow gcd(x-x',n)d←gcd(x−x′,n)
if d=n then return failure
else return d

因数分解——Pollard' p-1 Pollard rho相关推荐

  1. 【快速因数分解】数论--质因数

    如何分解质因数? 百度的方法如下: (一) 分解质因数只针对合数.(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止. 分解质因数的方法是先用一个合数的最小质因 ...

  2. 64位以内Rabin-Miller 强伪素数测试和Pollard rho 因数分解解析

    在求解POJ1811题Prime Test中应用到的两个重要算法是Rabin-Miller强伪素数测试和Pollard r因数分解算法.前者可以在的时间内以很高的成功概率判断一个整数是否是素数.后者可 ...

  3. 因数分解 Pollard rho

    因数分解 Pollard rho 算法思路 随机生成两个数a,ba,ba,b,然后求gcd⁡(n,a−b)\gcd\pod{n,a-b}gcd(n,a−b),如果其值不为111,则这个数就是nnn的一 ...

  4. 【快速因数分解】Pollard's Rho 算法

    算法目的 给一个数n,快速提取n的一个因数. 算法根据:生日悖论 讲生日悖论之前,先看一个东西. 给出[1-1000]的数,从中任意选出一个数为k的概率是110001\over 100010001​. ...

  5. C++实现质因数分解

    质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数):否则称为合数.根据算术基本定理,每一个比1大的整数,要 ...

  6. 编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上

    //编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上 //***本题的难点是既要找出质因数,又要保证其连乘为该数 //***需要两个循环,外循环与内循环 /*每个合数 都可以写成几个 质数 相乘 ...

  7. c语言素数筛法与分解素因数,质因数分解及代码:

    计算方法 短除法 求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止.分解质因数的算式的叫短除法,和除法的性质差不多,还可以用来求多个个数的公因式: 求最大公因数的一种方法,也可用来求最小 ...

  8. 质因数分解及算法实现

    每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数.而这个因数一定是一个质数. 定义 质因数(或质因子)在数论里是指 ...

  9. 关于质因数,分解质因数

    质因数(素因数或质因子):在数论里是指能整除给定正整数的质数. 互质:除了1以外,两个没有其他共同质因子的正整数称为互质. 因为1没有质因子,1与任何正整数(包括1本身)都是互质. 正整数的因数分解可 ...

  10. 数论 —— 整数分解

    [概述] 整数分解目前仍是世界级难题,是非常重要的研究方向,其有很多种算法,性能上各有差异,本文仅介绍试除法.Fermat 算法.Pollard Rho 算法. [试除法] 试除法也叫穷举法,是整数分 ...

最新文章

  1. arm el2与el3_ARMv8的学习笔记
  2. 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC
  3. 数据库_第一第二第三范式讲解(通俗易懂)
  4. 试题 历届试题 幸运数(二分)
  5. 使用Stackblitz一分钟之内创建一个Angular应用
  6. apache camel_使用Apache Camel发布/订阅模式
  7. 系统容灾备份选型的决策表
  8. 快速幂(一个简单快速适合整数幂次的运算)
  9. Spring中如Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?
  10. nginx源码包安装
  11. flash遮罩弹性跟随效果
  12. 2022年T电梯修理报名考试及T电梯修理最新解析
  13. C语言编程基础— 一维数组 (编程实现从键盘输入20个整数,统计非负数个数,并计算非负数之和。)
  14. 渗透测试之通道构建Cheat Sheet
  15. 关于MATLAB直方图的绘制及应用
  16. Apple watch ,小米微信通知
  17. cshop是什么开发语言_Fecshop 多语言
  18. 关键字驱动自动化测试
  19. Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification
  20. 如何让plsql记住密码,实现快速登录

热门文章

  1. 有赞 CTO 崔玉松:我想打造出中国最好的技术团队
  2. 全球与中国结肠水疗机市场深度研究分析报告
  3. shape-outside
  4. 【项目管理】测量绩效域管理
  5. MyBatis学习笔记之三
  6. 360校招笔试算法题
  7. Python笔记 之 interval模块
  8. 进口十大旋转编码器厂商
  9. unity3d内存分析工具memory profiler
  10. 收集的JS代码,学习js的入门经典