我试图解决x的以下等式,使if语句成立。我尝试过使用线性同余方程,但无法得到正确的答案。
我使用的假设是整数溢出发生在2 ^ 63-1,x是类型long
有人可以给我一个如何做到这一点的指针吗?
long arg1 = 1234123412341234;
long arg2 = -3456345634563456;
if(x * arg1 == arg2) {
//true
}
答案 0 :(得分:2)
首先,请注意未定义有符号整数溢出。但是,定义了无符号整数溢出。我不确定这会改变多少问题,但我会假设无符号整数而不是有符号整数。
问题同样是 x × arg1 = arg2 。为了使包装明确,我们有 x × arg1 ≡ arg2 (mod 2 64 )。如果我们想要 x ,我们只需要解决它;特别是,我们有 x ≡ arg1 -1 × arg2 (mod 2 64 )。
那么问题是如何找到 arg1 -1 。碰巧这被称为modular multiplicative inverse,当它存在时(如果 arg1 存在于2 64 的相对素数),则可以使用extended Euclidean algorithm