我尝试使用 Sieve Eratosthenes 方法列出最多 20 亿个素数。这是我用的!
我面临的问题是,我无法超过 1000 万个数字。当我尝试时,它显示“分段错误”。我在网上找了找原因。有些网站说,这是编译器本身的内存分配限制。有人说,这是硬件限制。我正在使用安装了 4GB RAM 的 64 位处理器。请建议我列出它们的方法。
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
long int mark[MAX] = {0};
int isone(){
long int i;
long int cnt = 0;
for(i = 0; i < MAX ; i++){
if(mark[i] == 1)
cnt++;
}
if(cnt == MAX)
return 1;
else
return 0;
}
int main(int argc,char* argv[]){
long int list[MAX];
long int s = 2;
long int i;
for(i = 0 ; i < MAX ; i++){
list[i] = s;
s++;
}
s = 2;
printf("\n");
while(isone() == 0){
for(i = 0 ; i < MAX ; i++){
if((list[i] % s) == 0)
mark[i] = 1;
}
printf(" %lu ",s);
while(mark[++s - 2] != 0);
}
return 1;
}