最快计算python中512位数的最大素因子

时间:2010-03-08 18:12:27

标签: python primes factorization

我在python中模拟我的加密方案,我是它的新用户。

p = 512位数,我需要计算它的最大素因子,我正在寻找两件事:

  1. 处理此大质数分解的最快代码
  2. 可以将512位数作为输入并且可以处理它的代码。
  3. 我在其他语言中看到了不同的实现,我的整个代码都在python中,这是我被卡住的最后一点。所以请告诉我python中是否有任何实现。

    请简单解释一下,因为我是python的新用户

    抱歉英语不好。

    编辑(取自OP的答案):

    #!/usr/bin/env python
    def highest_prime_factor(n):
       if isprime(n):
          return n
       for x in xrange(2,n ** 0.5 + 1):
          if not n % x:
             return highest_prime_factor(n/x)
    
    def isprime(n):
       for x in xrange(2,n ** 0.5 + 1):
          if not n % x:
             return False
       return True
    
    if  __name__ == "__main__":
       import time
       start = time.time()
       print highest_prime_factor(1238162376372637826)
       print time.time() - start
    

    上面的代码对于“1238162376372637826”有效(有点延迟)但是 将其扩展到

      

    10902610991329142436630551158108608965062811746392   57767545600484549911304430471090261099132914243663   05511581086089650628117463925776754560048454991130443047

    让python变得疯狂。有没有办法,就像上面一样,我可以拥有它 马上计算出来了吗?

4 个答案:

答案 0 :(得分:3)

对于基于Python的解决方案,您可能需要查看pyecm在安装了gmpy的系统上,pyecm发现了以下因素:

101,521,3121,9901,36479,300623,53397071018461,1900381976777332243781

还有一个98位数的无结果复合词:

60252507174568243758911151187828438446814447653986842279796823262165159406500174226172705680274911

使用ECM对剩余的复合材料进行分解可能并不实际。

编辑:几个小时后,剩下的因素是

6060517860310398033985611921721

9941808367425935774306988776021629111399536914790551022447994642391

答案 1 :(得分:1)

如果您可以安装扩展程序,gmpy会有所帮助 - 请参阅我对此SO question的回答,特别是我在此处显示的代码中的def prime_factors(x)函数。

在纯Python(不允许任何扩展)中,它更难,速度慢得多,例如,请参阅代码here(但是当它运行在您的巨大数字上时不要屏住呼吸;-)。

答案 2 :(得分:1)

这应该比大数字的简单方法更合适(尽管使用这种数字处理每个纯Python实现都需要一段时间):Pollard Rho prime factorization

答案 3 :(得分:0)

('''==============================================================================='''
>        '''              CALCULATE  HIGHEST PRIME
> FACTOR                                  '''
>
> '''===============================================================================''')
>
> #!/usr/bin/env python
> def highest_prime_factor(n):
>    if isprime(n):
>       return n
>    for x in xrange(2,n ** 0.5 + 1):
>       if not n % x:
>          return highest_prime_factor(n/x)
> def isprime(n):
>    for x in xrange(2,n ** 0.5 + 1):
>       if not n % x:
>          return False
>    return True
> if  __name__ == "__main__":
>    import time
>    start = time.time()
>    print highest_prime_factor(1238162376372637826)
>    print time.time() - start

代码在数字上有一点延迟:“1238162376372637826”但是 延伸到 (109026109913291424366305511581086089650628117463925776754560048454991130443047109026109913291424366305511581086089650628117463925776754560048454991130443047) 让python变得疯狂。有没有像上面那样的方式,我可以拥有它 马上计算出来。