【JavaScript】エラトステネスの篩を書いてみた
- 作者: 近藤嘉雪
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/01/29
- メディア: 単行本
- 購入: 1人 クリック: 15回
- この商品を含むブログ (5件) を見る
エラトステネスの篩とは
エラトステネスの篩(エラトステネスのふるい)は、指定された整数以下の全ての素数を発見するための単純なアルゴリズムである。古代ギリシアの科学者、エラトステネスが考案したとされるため、この名がある。(Wikipedia)
アルゴリズム
例えば、n = 10とすると、 【1】 探索リスト = {2,3 〜 10}
【2-1】(素数リストの先頭「2」の倍数をふるい落とす) 素数リスト = {2} 探索リスト = {3,5,7,9}
【2-2】(素数リストの先頭「3」の倍数をふるい落とす) 素数リスト = {2,3} 探索リスト = {5,7}
【4】(探索リストの先頭「5」がn=10の平方根より大きくなったため処理終了) 素数リスト = {2,3,5,7}
実装
var MAX = 100; var sieve = new Array(MAX); //全ての数に対して素数フラグを立てる for (var i = 0; i < MAX; i++) { sieve[i] = true; } //最大値の平方根を計算 var max = Math.floor(Math.sqrt(MAX)); //0,1は素数でないので外す sieve[0] = false; sieve[1] = false; //探索リストの先頭 >= MAXの平方根まで、素数リストの倍数をふるい落としていく for(var i = 2; i <= max; i++) { //素数だったら if(sieve[i] === true) { //その倍数をふるい落とす for(var j = i * 2; j <= MAX; j += i) { sieve[j] = false; } } } //素数の出力 for(var i = 0; i < MAX; i++) { if(sieve[i] === true) { console.log(i); } }