是否存在Python的与素数相关的函数库?

时间:2012-06-11 05:22:30

标签: python primes

我刚刚实现了Miller-Rabin-Test和一个简单的函数来分解数字。两者都可以做得更好,至少Miller-Rabin-Test是众所周知的。

那么请你告诉我是否存在实现这种常见主要功能的Python库,或者为什么不存在这样的库?

6 个答案:

答案 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())是GMPY2documentation也可用。

答案 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