素数の算出って前からコーディングしておきたかったんですよね。
とりあえず、この間、会社の人に「素数って何?」と聞かれて、知らない大人がいるのかと内心ビックリしていたんですが、素数を知ってる人って理数系っている定義、必要ですか?
「複素数」を知らないのは100歩譲って許すが、素数は知らないと恥ずかしいレベルだろ!と思うのは僕だけでしょうか?
素数について
とりあえず、どうしてもわからない人の為に簡単に説明しておきます。
https://ja.wikipedia.org/wiki/素数
1より大きい自然数で、正の約数が 1と自分自身のみであるもののことである
ようするに、1以外で割り切れない数の事で、1は素数に入らないという事から、素数の最小数は2という事になる。
素数のギネス記録
ちなみに、現時点での素数の最大数は
2を4311万2609乗し、1を引いた数(1297万8189桁)
という数値らしいです。まったく想像できん・・・orz
ソースコード
//素数追求
function getPrimeNumber(num){
var flg = 0;
for(var i=2; i<=num -1; i++){
if(num % i === 0){
flg = i;
break;
}
}
if(flg === 0){
return true;
}
else{
return false;
}
}
// 結果数値用の器
var prime_numbers = [];
// 1~100まで
for(var i=2; i<=100; i++){
if(getPrimeNumber(i) === true){
prime_numbers.push(i);
}
}
// 結果
console.trace(prime_numbers);
実行
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
100までの数字で素数は25個存在するという事ですね。
wikipediaに正解が書かれているんですが、どうやら問題なく正解のようですね。
解説
素数の性質から2からスタートして100までのfor文
基本for文と割り込む関数内のfor文が2からスタートしているのは、このためです。
getPrimeNumber関数
素数であればtrueを返し、割り切れる数が存在すれば、falseを返すようにしてます。
%の余剰を使って割り切れるかどうかを判定してます。
余談・・・
素数の計算式というのがあって、
という式です。
詳しく知りたい人はググッてもいいし、数学勉強して理解してみてください。
ここでは、この式の解説は行いません。
リンク
色々なプログラム言語でアルゴリズム学習
0 件のコメント:
コメントを投稿