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

例如,printPrimes(500000)将使用所有质数最多第50万个(即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) {
        odd += 2;
        if (isPrime(odd, primes, n)) {
            printf("%ld ", odd);
            primes[index] = odd;
            ++index;
        }
    }

}

最佳答案

这里:

long primes[n];

如果n足够大(堆栈非常小),则会使堆栈溢出。尝试改用malloc
long *primes = malloc(sizeof(*primes) * n);

关于c - 素数打印机功能,传递足够大的数字时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7301535/

10-11 21:50