python求因子个数_最快的计算python中512位数字的最大素因数

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

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

处理这种大素数分解的最快代码

可以接受512位数字作为输入并可以处理的代码。

我看到了其他语言的不同实现,我的整个代码都在python中,这是我遇到的最后问题。 因此,请让我知道python中是否有任何实现。

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

对不起,英语不好。

编辑(摘自以下OP的答案):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19#!/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变得疯狂。 有什么办法可以让我像上面一样

立即计算出来?

512位数字是155位数字,仅是Python long。 无需特殊代码。 真的没有太多。 当然,除了用于分解大素数的实际算法。 您需要算法吗? 到目前为止你有什么?

嗯 您知道,分解一般的512位数字仅是目前在合理的时间内在一台计算机上可以完成的工作的极限? 这是维基百科的一句名言:"截至2007年底,单人在数台PC上,几个月就可以算出高达520位的通用格式数字,而无需任何特殊的数学经验。" 请参阅:en.wikipedia.org/wiki/Integer_factorization_records

-1:"有什么办法可以像上面那样立即进行计算吗?" 提出这样的问题表明您确实不清楚自己在做什么。

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

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

仍然有一个98位数的非因式合成:

60252507174568243758911151187828438446814447653986842279796823262165159406500174226172705680274911

使用ECM分解此剩余复合材料可能不切实际。

编辑:几个小时后,其余因素是

606051786031039803398561192172121

9941808367425935774306988776021629111399536914790551022447994642391

这比用于大量的琐碎方法更好(尽管使用这种数字处理每个纯Python实现都需要一段时间):Pollard Rho素数分解。

Pollard测试通常不会在实际时间内处理这么大的输入。 Rho寻找相对较小的因素。 P-1和P + 1算法寻找素数,该素数比因子都小的因子多或少。 除非您有特殊的数字,否则今天没有足够的512位。

@phkahler:感谢您的评论; 不知道。 Ive总是发现Pollard对于(相对)较大的数字非常快,但是理所当然,Ive从未向它扔512位。

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

在纯Python中(不允许任何扩展),它有点困难,也慢得多,例如,请参见此处的代码(但当它运行在庞大的数字上时,请不要屏住呼吸;-)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23('''==============================================================================='''

> ''' 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",但是

扩展到

(109026109913291424366305511581086089650628117463925776754560048454991130443047109026109913291424366305511581086089650628117463925776754560048454991991130443047)

使python变得疯狂。有什么办法可以像上面一样吗

立即计算出来。

您应该把这个放在您的问题中(Stackoverflow不遵循传统的论坛流程,而是基于问题-答案)。 麻烦您帮忙,如果您删除了这个答案,那将是最好的...

如果我没有"无暇"地考虑大质数,那我将是一个非常有钱的人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值