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