#include <stdio.h> #include <math.h> int main() { int a [ 101 ]、i、j; for(i = 1 ; i <= 100 ; i ++ ) { a [i] = i; // 初期値を配列に割り当てます } a [ 1 ] = 0 ; // [1] を削除します(i = 2 ; i <sqrt(100); i ++) // 1〜nの範囲の素数を見つける必要がある場合テーブルはルート番号n(整数を取る) { for(j = i + 1 ; j <= 100 ; j ++ ) で除算する必要があるだけですif(a [i]!= 0 && a [j]!= 0 ) if(a [j]%a [i] == 0 ) { a [j] = 0 ; } } printf(" \ n " ); int n; for(i = 2、n = 0 ; i <= 100 ; i ++ ) { if(a [i]!= 0 ) { printf(" %5d " 、a [i]); n ++; } if(n == 10 ) { printf(" \ n " ); n = 0 ; // 1回の完了後に初期化 } } return 0 ; }
いわゆるふるい分け法は「エラトセンふるい法」で、一組のデータを一つずつ素数かどうかを判断し、素数でないものが見つかったらそれを掘り出して、最後に素数です。
アルゴリズムは次のように表すことができます。
(1)掘り出す1;
(2)次の数pを次の掘り出されていない数pで割り、pの倍数を掘り出す
(3)pがルート番号nの整数部分よりも小さいかどうかを確認します。小さい場合は(2)を返し、実行を続行します。それ以外の場合は終了します。
(4)残りは素数