python优化素数生成器

时间:2014-12-22 20:40:46

标签: python optimization terminal

以下是生成素数序列的代码。特别是这个代码,用户输入为整数(如果可以),并打印出许多数量的素数序列。有没有办法优化这个特定的脚本,以便它运行得更快,并可以更快的速度处理更大的数字?

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)

1 个答案:

答案 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。)