很多素数,非常快。使用Primesieve。
pyprimesieve的Python项目详细描述
pyprimesieve
很多素数,非常快。使用primesieve。
primeseen是可用的最快(如果不是最快)的primeseen实现之一,它由 金瓦利希。
< P>使用带轮分解的埃拉托色尼的分段筛子来处理^ {TT1}$操作的复杂性。性能
关于PrimeScript的C++:primesieve generates the first 50,847,534 primes up to 10^9 in just 0.4 seconds on a single core of an Intel Core i7-920 2.66GHz, this is about 50 times faster than an ordinary C/C++ sieve of Eratosthenes implementation and about 10,000 times faster than trial-division. primesieve outperforms [Kim’s] older ecprime (fastest from 2002 to 2010) by about 30 percent and also substantially outperforms primegen the fastest sieve of Atkin implementation on the web.
相比之下,在英特尔酷睿i7 2GHz上,pyprimesieve会填充第一个 在1.40秒内完成50847534个质数。预期Python实现会比C++慢,但是 令人惊讶的是,只有一秒钟。
pyprimesieve优于所有最快的python质数筛选实现。
生成100万以下所有素数并在python中迭代它们的时间(ms):
algorithm | time |
pyprimesieve | 2.79903411865 |
primesfrom2to | 13.1568908691 |
primesfrom3to | 13.5800838470 |
ambi_sieve | 16.1600112915 |
rwh_primes2 | 38.7749671936 |
rwh_primes1 | 48.5658645630 |
rwh_primes | 52.0040988922 |
sieve_wheel_30 | 59.3869686127 |
sieveOfEratosthenes | 59.4990253448 |
ambi_sieve_plain | 161.740064621 |
sieveOfAtkin | 232.724905014 |
sundaram3 | 251.194953918 |
这里可以看到,pyprimesieve比使用Numpy和 ^{em1}比最快的纯python筛快13.85倍。
所有的基准脚本和算法都可以复制。采用质数筛算法实现 来自this discussion on SO。
功能
primes(n):指向n的素数列表。
primes(start,n):从start到n的素数列表。
primes_sum(n):到n的素数之和。将为 给定的数字和系统。
primes_sum(start,n):从start到n的素数之和。最佳线程数为 为给定的数字和系统确定。
primes n(n):第n个素数。
factorize(n):表示n的素数因子分解的元组列表(素数,幂)。
安装
pip install pyprimesieve
note:要启用基本求和的并行化版本,必须使用支持openmp的编译器。你可以 需要将有效的编译器作为环境变量传递。
测试
安装后,您可以通过在项目根文件夹中运行以下命令来确保一切正常工作,
python tests
许可证
“修改的BSD许可证”。有关详细信息,请参见许可证。Jared Suttles版权所有,2015年。
更改
0.1.6(2015-07-07)
- python 3支持
- 不再假设setup.py中的g++,而是尝试使用openmp安装,如果失败则重试
0.1.5(2015-07-05)
- 添加到PYPI
0.1.4(2013-08-06)
- 并行素数求和现在是一个类
- 调用回调方法的线程在大输入时不同步,因此速度更快
- 更新了Bench中的自述文件以反映新的计时(小的输入稍差,大的则快一倍)
0.1.3(2013-08-05)
- 修复了编译警告
- 外部“C”
- 向自述文件添加了有关安装的更多信息;更新了docstring
0.1.2(2013-07-12)
- 素数使用回调类而不是创建任何pyobject来调用素数
- 导致内存泄漏且不必要
0.1.1(2013-07-12)
- distutils setup.py:使用openmp进行多线程求和编译
- 删除了手动编译可执行文件的所有代码
- 设置c c和cxx环境变量以避免clang(和其他非openmp ccompilers)使用
- 用实际扩展名中的并行函数替换可执行代码
0.1.0(2013-07-06)
- pyprimesieve初始值