我有这段代码可以将素数打印到屏幕上。
例如,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) {
odd += 2;
if (isPrime(odd, primes, n)) {
printf("%ld ", odd);
primes[index] = odd;
++index;
}
}
}
答案 0 :(得分:6)
下面:
long primes[n];
如果n
足够大(堆栈非常小),那么堆栈就会溢出。请尝试使用malloc
。
long *primes = malloc(sizeof(*primes) * n);