急,为什么用devc++运行最多输出到3137,而把1000w改成100w又能输出到999983。
这个问题很简单,因为一般程序默认的栈空间只有1M,因此无法在栈上开辟1000万的数字。需要开辟在堆上。
我帮你写了一版,供你参考。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10000000
int main() {
int *arr = (int *)malloc((N + 1) * sizeof(int));
memset(arr, 1, sizeof(arr));
for (int i = 2; i <= N; i++) {
if (arr[i]) {
printf("%d ", arr[i]);
}
}
for (int i = 2; i * i <= N; i++) {
if (arr[i]) {
int k = i;
while (k <= N) {
k += i;
arr[k] = 0;
}
}
}
for (int i = 2; i <= N; i++) {
if (arr[i]) {
printf("%d ", i);
}
}
free(arr);
return 0;
}