エラトステネスのふるい法を使用して、最大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;
}