我是一个17岁的孩子,在Python编程语言的帮助下开始编程.
我一直在寻求优化这个算法,可能是通过消除其中一个循环,或者用更好的测试来检查质数.
尝试计算并显示100000个素数时,脚本暂停约6秒,因为它在素数列表作为输出返回到控制台之前用素数填充列表.
我一直在尝试使用
print odd,
Run Code Online (Sandbox Code Playgroud)
简单地打印每个找到的素数,对于较小的输入(如n = 1000)更快,但对于n = 1000000,列表本身打印速度要快得多(在python shell和控制台中).
也许整个代码/算法应该进行修改,但脚本应保持基本相同:用户键入要打印的素数(n),脚本返回所有素数直到第n个素数.
from time import time
odd = 1
primes = [2]
n = input("Number of prime numbers to print: ")
clock = time()
def isPrime(number):
global primes
for i in primes:
if i*i > number:
return True
if number%i is 0:
return False
while len(primes) < n:
odd += 2
if isPrime(odd):
primes += [odd]
print primes
clock -= time()
print "\n", -clock
raw_input()
Run Code Online (Sandbox Code Playgroud)
我可能想重写整个剧本,使用像阿特金筛子一样的筛子:http://en.wikipedia.org/wiki/Sieve_of_Atkin …
我有这段代码可以将素数打印到屏幕上.
例如,printPrimes(500000)将填满屏幕,所有素数最多为500000(即7368787).
问题是,传递600000或1000000这样的较大数字会破坏程序.
有任何想法吗?提前致谢.
typedef enum {false, true} bool;
bool isPrime(long number, long primes[], long n) {
int divisor, index;
for (index = 0; index < n; ++index) {
divisor = primes[index];
if (divisor * divisor > number) {
return true;
} else if (number % divisor == 0) {
return false;
}
}
return 0;
}
void printPrimes(long n) {
long primes[n];
long odd, index;
primes[0] = 2;
odd = 1;
index = 1;
while (index < n) { …Run Code Online (Sandbox Code Playgroud) algorithm ×1
arrays ×1
c ×1
c99 ×1
crash ×1
numbers ×1
optimization ×1
performance ×1
python ×1