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件 みつかりました。