こんばんは
今回はJavaScriptで素数か判別し、素因数分解をするプログラムを作成したのでソースコードについて解説していきたいと思います。
今回のプログラムはこちらで動かすことができます。
ソースコード
最初にソースコードを載せます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>それ素数?</title> </head> <body> <h1 style="text-align:center">それ素数?</h1> <h3 style="text-align:center">入力した数字が素数か判別します<br>素数でない場合、素因数分解の計算結果を表示します</h3> <form style="text-align:center"> <input type="text" id="input_number" value="2"> <input type="button" onclick="judge()" value="判定"> </form> <div id="output_message" style="text-align:center"></div> <div id="output_message2" style="text-align:center"></div> <script language="javascript" type="text/javascript"> function judge() { var divisor = 0; var answer; var number = document.getElementById("input_number").value; if(isNaN(number) == false){ for(var i = 1;i<=number;i++){ if(number%i == 0){ divisor++; } } if(divisor == 2){ answer = "素数" document.getElementById("output_message2").innerHTML = ""; }else{ answer = "素数ではない" primeFactorization(number); } var output_message = "入力された数字「" + number + "」は"+answer+"です<br>約数は"+divisor+"個でした"; document.getElementById("output_message").innerHTML = output_message; }else{ var output_message = "数字を入力してください" document.getElementById("output_message").innerHTML = output_message; } } function primeFactorization(n){ var sqrt_number = Math.floor(Math.sqrt(n)); var index = 0; var array = []; for(var i = 2;i <= sqrt_number;i++){ if((n%i) == 0){ index = 0; do{ index++; n = n/i; }while((n%i) == 0); array.push(" "+i+"^"+index+" "); } } if(n > sqrt_number){ array.push(" "+n+"^1 "); } document.getElementById("output_message2").innerHTML = "素因数分解の結果は<br>"+array.join('×'); } </script> </body> </html> |
このプログラムは2つの関数 judge() , primeFactorization(n)から構成されています。
judge関数
judge関数は素数かどうかを判別する関数です。
入力された数字を読み取り、for文により1からその数値までの整数で順次割っていきます。
それにより約数を数え、約数が2つであれば「素数です」、2つ以外であれば「素数ではないです」と表示します。
isNaN関数は値が数字かどうかを調べます。数字でなければtrue、数字であればfalseを返します。
judge関数は素数でない場合には、次に記述するprimeFactorization関数を呼び出します。
primeFactorization関数
primeFactorization関数は素因数分解をする関数です。
入力された数字を2からその数値の平方根までの整数で順次割っていきます。
平方根までである理由は、整数を積の形で表すときに平方根があるとすると、残りの数が平方根以下になるからです。
素数でない場合には、素因数分解の計算結果が見えることによってユーザーに納得してもらえると思い作成しました。
まとめ
今回は素数か判別し、素因数分解をするプログラムを作成しました。
特に難しいことはしていませんが、役立つツールっぽいものを作りたかったので個人的には結構満足しています。
冒頭にも載せましたが今回のプログラムは今回のプログラムはこちらで動かすことができます。
是非試してみてください。