通用数场筛;分解200位数字

时间:2019-02-12 18:04:44

标签: python algorithm factorization

我在编程领域还很陌生,没有真正研究事物的工作方式。我需要的是一种分解200位数字的有效方法。我听说通用数字段筛是最好的算法。 python中是否有任何代码可以实现这个想法?还是有其他选择?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您在考虑什么?一般200位数字?在这种情况下,请使用http://pari.math.u-bordeaux.fr/dochtml/gpman.html或某个Python接口。 (我知道有几种http://www.sagemath.org/可以做到,https://pypi.org/project/cypari/为您提供了界面,而其余部分则没有。)

这些方法通常很快,因为它们使用各种可能找到因素的方法。对于很小的因素进行试验划分,对Rabin-Miller进行素数检验,elliptic curves对较小的因子进行检验,依此类推。

另一方面,如果您希望分解显示在密码术中的200位数字,则需要做更多的工作。他们故意使您的号码无法被您可以尝试的任何快速操作所考虑。正如https://en.wikinews.org/wiki/Two_hundred_digit_number_factored所指出的那样,这实际上需要多年的CPU时间,因此您将使用高度优化的实现(即,不是用Python编写的),并将大部分工作分配到多台计算机上。

要实际执行这种分解,我建议从https://en.wikipedia.org/wiki/General_number_field_sieve#Implementations开始并从那里开始。

如果您的目标是了解因式分解的工作原理,那么将要走一堆数字理论文献。我建议首先尝试学习二次筛,因为它既相关又简单得多。 (因此,这是一个较短的理解过程,将为您解决较难的问题提供动力。)该筛分方法不如一般的数字理论筛分200位数字,但对于100位数字则更好,因此仍然很酷。