Kotlin: 互いに素なピタゴラス数を求める


Kotlin で、 互いに素ピタゴラス数を求めてみました。

環境

  • Kotlin 1.1.2-2

方針

互いに素なピタゴラス数 ( a, b, c ( a leq b lt c ) ) を考えます。 ピタゴラス数: ディオファントスの式 にも書きましたが、 このとき ( c ) は奇数で、 ( a ), ( b ) は偶数と奇数です。

そこで、 ( c ) を奇数のループにします。 ( b ) を ( frac{c}{sqrt{2}} lt [frac{c}{sqrt{2}}] + 1 leq b lt c ) の範囲でループさせます。 そして ( a = sqrt{ b ^ 2 – c ^ 2 } ) が整数になる場合にそれをピタゴラス数とします。 ただし互いに素である必要があるため、共通因数を持つ場合は排除します。

この方針で、 ( c leq 1000 ) となるピタゴラス数をすべて抽出します。

コード

共通因数が存在するか否かは Kotlin: ユークリッドの互除法で最大公約数を求める のコードを流用します。

まずはピタゴラス数を格納するクラスを作っておきます。 これはリストや配列でもOKです。

こちらがメインの処理です。 計算の最後に、ピタゴラス数をすべて出力し、計算されたピタゴラス数の件数を出力します。

実行結果

( c leq 1000 ) では 158件 みつかりました。