Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中生成给定长度的素数 在C++ NTL库中,是否存在任何生成给定二进制长度质数的嵌入函数?< /P>_Python_Primes - Fatal编程技术网

在python中生成给定长度的素数 在C++ NTL库中,是否存在任何生成给定二进制长度质数的嵌入函数?< /P>

在python中生成给定长度的素数 在C++ NTL库中,是否存在任何生成给定二进制长度质数的嵌入函数?< /P>,python,primes,Python,Primes,如果不是,那么是否需要检查给定长度的所有数字,直到遇到素数 有一个完整的现成软件包。检查 它包含对流行的有效方法的实现,如Eratosthenes筛法、Croft螺旋法、轮因式分解法等,还包含用于初始测试的函数 在StackOverflow上也有一些有趣的素数生成线程。检查: 有一个完整的现成软件包。检查 它包含对流行的有效方法的实现,如Eratosthenes筛法、Croft螺旋法、轮因式分解法等,还包含用于初始测试的函数 在StackOverflow上也有一些有趣的素数生成线程。检查:

如果不是,那么是否需要检查给定长度的所有数字,直到遇到素数

有一个完整的现成软件包。检查

它包含对流行的有效方法的实现,如Eratosthenes筛法、Croft螺旋法、轮因式分解法等,还包含用于初始测试的函数

在StackOverflow上也有一些有趣的素数生成线程。检查:


有一个完整的现成软件包。检查

它包含对流行的有效方法的实现,如Eratosthenes筛法、Croft螺旋法、轮因式分解法等,还包含用于初始测试的函数

在StackOverflow上也有一些有趣的素数生成线程。检查:


如果这些数字很小,小于10^9左右,则可以使用分段筛出的埃拉托斯烯来生成一定范围内的素数。如果数字较大,则需要测试奇数的素性。编写素性检查器并不难:

def isPrime(n, k=5): # miller-rabin
    from random import randint
    if n < 2: return False
    for p in [2,3,5,7,11,13,17,19,23,29]:
        if n % p == 0: return n == p
    s, d = 0, n-1
    while d % 2 == 0:
        s, d = s+1, d/2
    for i in range(k):
        x = pow(randint(2, n-1), d, n)
        if x == 1 or x == n-1: continue
        for r in range(1, s):
            x = (x * x) % n
            if x == 1: return False
            if x == n-1: break
        else: return False
    return True
作为一个简单的检查,我们注意到有78498个素数少于一百万(尽管如果您想按顺序生成所有素数,您应该知道这将比使用筛子慢两到三个数量级):


如果你对素数编程感兴趣,我在我的博客上有点推荐。

如果素数很小,小于10^9,可以使用一个分段的埃拉托什筛来生成一个范围内的素数。如果数字较大,则需要测试奇数的素性。编写素性检查器并不难:

def isPrime(n, k=5): # miller-rabin
    from random import randint
    if n < 2: return False
    for p in [2,3,5,7,11,13,17,19,23,29]:
        if n % p == 0: return n == p
    s, d = 0, n-1
    while d % 2 == 0:
        s, d = s+1, d/2
    for i in range(k):
        x = pow(randint(2, n-1), d, n)
        if x == 1 or x == n-1: continue
        for r in range(1, s):
            x = (x * x) % n
            if x == 1: return False
            if x == n-1: break
        else: return False
    return True
作为一个简单的检查,我们注意到有78498个素数少于一百万(尽管如果您想按顺序生成所有素数,您应该知道这将比使用筛子慢两到三个数量级):

如果你对素数编程感兴趣,我谦虚地在我的博客上推荐你

>>> len, p = 0, 2
>>> while p < 1000000:
...     len += 1
...     p = nextPrime(p)
...
>>> len
78498
>>> nextPrime(12345678901234567890123456789012345678901234567890123)
12345678901234567890123456789012345678901234567890223L