我有这段代码可以将质数打印到屏幕上。
例如,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/