2015年11月3日火曜日

Javascriptでピタゴラス数を求める

普段管理人が通う学校の教師の提案で、「ピタゴラス数」を求めるプログラムを作ってみました。

ピタゴラス数って何?って方はWikipedia - ピタゴラス数をご覧ください。

ここでのmnは、ピタゴラス数の面積を求めるのに使用する自然数(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>の最大値&nbsp;<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>

作り方を知りたい方は、コメントいただければ解説します。