初试筛法求0~1000w内的所有素数遇到的问题

img

急,为什么用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;
}