奇数を考えると、それらの積モジュロ(つまり、通常のオーバーフロー演算を使用)が1に等しくなるようにlong x
探しています。意味を明確にするために:これは、この方法で数千年で計算できます。long y
2**64
for (long y=1; ; y+=2) {
if (x*y == 1) return y;
}
これは拡張ユークリッドアルゴリズムを使用してすばやく解決できることは知っていますが、関連するすべての数値を表す機能が必要です(最大で2**64
、符号なし算術でも役に立ちません)。使用BigInteger
することは確かに役立ちますが、正の長さに対して実装された拡張ユークリッドアルゴリズムを使用するなど、より簡単な方法があるのではないかと思います。