您好,欢迎来到赴品旅游。
搜索
您的当前位置:首页【大数分解】Pollard‘s p-1 method

【大数分解】Pollard‘s p-1 method

来源:赴品旅游

前置知识

原理

流程及优化

算法流程

优化

  • 选取 a = 2 a=2 a=2 ,乘法相当于位运算
  • g c d   ⁡ ( a B ! − 1 , N ) = g c d   ⁡ ( a B ! − 1   m o d   N , N ) \ ⁡(a^{B!}−1, N)=\ ⁡(a^{B!}−1 \ mod \ N, N) gcd (aB!1,N)=gcd (aB!1 mod N,N),显然计算 a B ! − 1   m o d   N a^{B!}−1 \ mod \ N aB!1 mod N 更好
  • 并不需要每次都算一遍 g c d gcd ,选取合适的间隔来减少计算 g c d gcd 的次数
  • p 1 , p 2 , … , p n p_1,p_2, \dots ,p_n p1,p2,,pn 这些素数是随机在小于 B B B 的数中选取,那么其中最大的素数大概率要大于 0.8 B 0.8B 0.8B 。因此在 j < 0.8 B j<0.8B j<0.8B 之前不计算 g c d gcd ,节省时间

Python实现

# author: 随缘
# time: 2020-4-30

def pollard_p_1(n,B):
    """

    Factor n = p*q (p is B-smooth)
    :param n:
    :param B:
    :return: d = p
    """
    # step 1
    a = 2
    # step 2
    false_range = int(0.8*B)
    for j in range(2,false_range):
    # We assume n had a factor > 0.8B,so we can do less 
        a = pow(a, j, n)

    d = 0
    for j in range(false_range,B+1):
    # step 3
        a = pow(a, j, n)
    # step 4
        d = (a-1, n)
    # step 5
        if 1<d<n:
            return d

参考资料

  • A Course in Computational Algebraic Number Theory by Henri Cohen

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fupindai.com 版权所有 赣ICP备2024042792号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务