以下是生成素数序列的代码。特别是这个代码,用户输入为整数(如果可以),并打印出许多数量的素数序列。有没有办法优化这个特定的脚本,以便它运行得更快,并可以更快的速度处理更大的数字?
P = 2
Count = 1
X = int(raw_input('choose number: '))
def Main(P, X):
while Count <= X:
isprime = True
for x in range(2, P - 1):
if P % x == 0:
isprime = False
if isprime:
print P
Count += 1
P += 1
Main(P, X)
答案 0 :(得分:1)
n
- 素数小于N = max(12, n*(log(n) + log(log(n))))
。了解N
,您可以使用Fastest way to list all primes below N链接provided by @Jonathan Davies中的任何解决方案。
例如,使用simple Sieve of Eratosthenes implementation,此处为live example
:
#!/usr/bin/env python2
from itertools import islice
from math import log
def iprimes_upto(limit):
is_prime = [True] * limit
for n in xrange(2, limit):
if is_prime[n]:
yield n
for i in xrange(n*n, limit, n): # start at ``n`` squared
is_prime[i] = False
n = int(raw_input('Choose number of primes to print: '))
N = max(12, int(n*(log(n) + log(log(n))) + .5)) # find limit
for p in islice(iprimes_upto(N), n): # get n primes
print p
作为替代方案,您可以使用an infinite prime generator(在这种情况下,您不需要计算limit
。)