primesieve-python, 快速素数生成器C++ 库primesieve周围的python 绑定

分享于 

5分钟阅读

GitHub

  繁體 雙語
Fast prime number generator. Python bindings around C++ library primesieve
  • 源代码名称:primesieve-python
  • 源代码网址:http://www.github.com/hickford/primesieve-python
  • primesieve-python源代码文档
  • primesieve-python源代码下载
  • Git URL:
    git://www.github.com/hickford/primesieve-python.git
    Git Clone代码到本地:
    git clone http://www.github.com/hickford/primesieve-python
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/hickford/primesieve-python
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    primesieve-python

    Build StatusBuild statusPyPIGitHub license

    primesieve C++ 库的python 绑定。

    生成比任何纯 python 代码快的素数级 !

    功能:

    • 获取素数列表
    • 使用小内存迭代素数
    • 查找第n 个素数
    • 计数/打印素数和素数k tuplets。
    • 用于计算素数和查找n 个素数的多线程
    • NumPy支持

    动机

    我喜欢算法问题,比如在 Google Code Jam项目Euler中的算法问题。 许多与数论有关。 一次编写自己的素数查找代码很重要,但是有一个快速可靠的库也是很有用的。

    我最喜欢的两个问题: Google Code Jam 昂贵的晚餐和项目欧拉问题 500.

    先决条件

    你需要在除 Windows 之外的所有操作系统上安装 C++ 编译器。

    # Linuxsudo apt-get install g++ python-dev# macOS: first install Xcode using App Storexcode-select --install

    安装

    
    pip install primesieve
    
    
    
    

    用法示例

    >>>from primesieve import*# Get a list of the primes <= 40>>> primes(40)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]# Get a list of the primes between 100 and 120>>> primes(100, 120)
    [101, 103, 107, 109, 113]# Get a list of the first 10 primes>>> n_primes(10)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]# Get a list of the first 10 primes> = 1000>>> n_primes(10, 1000)
    [1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061]# Get the 10th prime>>> nth_prime(10)29# Count the primes below 10**9>>> count_primes(10**9)50847534

    下面是所有可用函数函数的列表。

    遍历素数

    而不是生成大量的素素,然后用素素来做某些事情,也可以简单的循环。

    >>>import primesieve
    it = primesieve.Iterator()
    prime = it.next_prime()# Iterate over the primes below 10000while prime <10000:
     print prime
     prime = it.next_prime()# Set iterator start number to 100it.skipto(100)
    prime = it.prev_prime()# Iterate backwards over the primes below 100while prime >0:
     print prime
     prime = it.prev_prime()

    3d NumPy支持

    使用 primesieve.numpy 模块,你可以使用的本地 C++ 性能生成一个素数的array

    相比之下,primesieve 模块生成的素数列表约为 7倍,因为 C++ 素数 array 到 python 列表的转换非常慢。

    >>>from primesieve.numpy import*# Generate a numpy array with the primes below 100>>> primes(100)
    array([ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
     61, 67, 71, 73, 79, 83, 89, 97])# Generate a numpy array with the first 100 primes>>> n_primes(100)
    array([ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
     43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,
     103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167,
     173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239,
     241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,
     317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397,
     401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467,
     479, 487, 491, 499, 503, 509, 521, 523, 541])

    插件开发

    你需要安装一个 C++ 编译器,请参阅先决条件。

    # Install prerequisitespip install cython pytest numpy# Clone repositorygit clone --recursive https://github.com/hickford/primesieve-pythoncd primesieve-python# Build and install primesieve-pythonpip install . --upgrade# Run testspy.test

    相关文章