给定一个奇数long x
,我正在寻找long y
它们的乘积模2**64
(即,使用正常的溢出算法)等于 1。为了明确我的意思:这可以在几千年内以这种方式计算:
for (long y=1; ; y+=2) {
if (x*y == 1) return y;
}
我知道这可以使用扩展的欧几里得算法快速解决,但它需要能够表示所有涉及的数字(范围高达2**64
,因此即使无符号算术也无济于事)。使用BigInteger
肯定会有所帮助,但我想知道是否有更简单的方法,可能使用为正数实现的扩展欧几里得算法。