我刚刚实现了Miller-Rabin-Test和一个简单的函数来分解数字。两者都可以做得更好,至少Miller-Rabin-Test是众所周知的。
那么请你告诉我是否存在实现这种常见主要功能的Python库,或者为什么不存在这样的库?
答案 0 :(得分:13)
我刚从SymPy package发现了isprime
:
import sympy
print sympy.isprime(10)
输出:
False
不要与返回第n个素数的prime
混淆:
import sympy
print sympy.prime(10)
输出:
29
答案 1 :(得分:9)
gmpy2支持各种伪劣测试。 Miller-Rabin测试以gmpy2.is_strong_prp()
为准。
gmpy2还没有任何分解代码。
免责声明:我是gmpy2的维护者。素性测试基于http://sourceforge.net/projects/mpzprp/files/
的代码答案 2 :(得分:1)
我认为标准库中不存在专用于主要功能的模块,但是当然有很多人已经编写了素数测试等等。
一个面向多精度算术的库,但有几个素数函数(例如is_prime()
和next_prime()
)是GMPY2
。 documentation也可用。
答案 3 :(得分:0)
如果您正在寻找算法的实现,请查看Rosetta Code。该网站有许多Python实现。你绝对可以根据个人需要拼凑自己的图书馆。
答案 4 :(得分:0)
Prime-Number-Python-Library是一个开发python库。适用于基本功能,对于较大的数字,速度非常快。
答案 5 :(得分:0)
我创建了一个具有很多功能的库(请参阅自述文件),但最重要的是它包含Alpertons ECM库,因此您可以使用ipython3的Alperton引擎(即使在Android下为Termux):
https://github.com/oppressionslayer/primalitytest/
只需在README开头观看视频,即可了解使用Alperton的C库进行操作有多么容易。
要使用它,只需使用sfactorint从原始目录导入p2ecm。要访问Alperton的ECM,请执行以下步骤:
cd calculators
make
cd ..
就是这样,sfactorint然后使用Alpertons ECM SIQS进行分解。我打算制作一个自动执行make步骤的pip安装,因此请继续关注是否感兴趣。
这里有一个60位数的示例数字因子,我在视频中的Android上以相同的速度执行相同的操作:
In [22]: import time
...: start = time.time()
...: print(p2ecm(632459103267572196107100983820469021721602147490918660274601))
...: end = time.time()
...: print(end-start)
...:
[650655447295098801102272374367, 972033825117160941379425504503]
5.197108030319214