小编Swe*_*l17的帖子

任何人都可以教我如何进一步优化这种'打印到第n个素数'脚本吗?

我是一个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 …

python algorithm optimization performance numbers

5
推荐指数
1
解决办法
322
查看次数

素数打印机功能,在传递足够大的数字时崩溃

我有这段代码可以将素数打印到屏幕上.

例如,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)

c arrays crash c99

0
推荐指数
1
解决办法
218
查看次数

标签 统计

algorithm ×1

arrays ×1

c ×1

c99 ×1

crash ×1

numbers ×1

optimization ×1

performance ×1

python ×1