普段管理人が通う学校の教師の提案で、「ピタゴラス数」を求めるプログラムを作ってみました。
ピタゴラス数って何?って方はWikipedia - ピタゴラス数をご覧ください。
ここでのmとnは、ピタゴラス数の面積を求めるのに使用する自然数(m > n)とします。
では、さっそく実物を。
mまたはnの最大値
処理結果
| mの値 | nの値 | 斜辺(m2 + n2) | 他の一辺(m2 - n2) | 他の一辺(2mn) | (参考) 面積 | (参考) mとnのG.C.D |
参考程度にソースコードをはっておきます。
<!--
<script>~</script>間はコメントアウトを省略
しています。
-->
<script type="text/javascript">
function tagainiso(){
// 剰余
var r;
var tagainiso_n = n;
var tagainiso_m = m;
gcd = 1;
while ((r = tagainiso_m % tagainiso_n) != 0) {
tagainiso_m = tagainiso_n;
tagainiso_n = r;
}
gcd = tagainiso_n;
if(gcd != 1) {
n = n / gcd;
m = m / gcd;
}
}
function pitagras(){
// 乱数その1
m = Math.floor(Math.random()*document.getElementById("max").value + 1);
//その2
n = Math.floor(Math.random()*document.getElementById("max").value + 1);
if(m < n) { // m >= nにする
var taihi = m; //一時退避
m = n;
n = taihi;
}
tagainiso();
//テーブル取得
var table = document.getElementById("area");
//行追加
var tr = table.insertRow(-1);
//セル挿入
tr.insertCell(-1).innerHTML = m;
tr.insertCell(-1).innerHTML = n;
tr.insertCell(-1).innerHTML = m * m + n * n;
tr.insertCell(-1).innerHTML = m * m - n * n;
tr.insertCell(-1).innerHTML = 2 * m * n;
tr.insertCell(-1).innerHTML = ( (m * m - n * n) * 2 * m * n ) / 2;
}
</script>
<p><b>m</b>または<b>n</b>の最大値 <input type="number" size="5" id="max" value="50"></p>
<p><button onclick="pitagras()">実行</button></p>
<p>処理結果<br>
<table id="area" border="1">
<tr>
<td>mの値</td>
<td>nの値</td>
<td>斜辺(m<sup>2</sup> + n<sup>2</sup>)</td>
<td>他の一辺(m<sup>2</sup> - n<sup>2</sup>)</td>
<td>他の一辺(2mn)</td>
<td>(参考) 面積</td>
</tr>
</table>
</p>
作り方を知りたい方は、コメントいただければ解説します。