Функция принтера Prime Number, сбои при прохождении достаточно большого количества номеров

У меня есть этот кусок кода, который напечатает простые номера до экрана.

Например, promptprimes (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) {
        odd += 2;
        if (isPrime(odd, primes, n)) {
            printf("%ld ", odd);
            primes[index] = odd;
            ++index;
        }
    }

}
0
задан Mat 4 September 2011 в 19:15
поделиться