无法在 Java 42L + -37L * X == 17206538691L 中找到 X 的值

Cannot find the value of X in Java 42L + -37L * X == 17206538691L

Long AAA = 42L;
Long BBB = -37L;
Long TTT = 17206538691L;

问题是不知道 X 应该是等式的值:

AAA + BBB * X == TTT

这应该会找到 X 的值,但它已关闭

Long X = TTT / BBB - AAA; 

这一直返回 false

Boolean Matched = AAA + BBB * X == TTT;
Long Result = AAA + BBB * X;
System.out.println(X.toString()+" Matched "+Matched.toString()+" Result "+Result.toString());

还不完全清楚你在找什么,但请注意 java 长算术有效完成 mod 264。您可以自己研究 modular 逆和扩展欧几里得算法,以及 java 如何处理整数溢出。 BigInteger class 使这些实验相对容易,如本例所示。

public class Main {
    static long AAA = 42L;
    static long BBB = -37L;
    static long TTT = 17206538691L;

    private static long solve() {
        // compute x = inverse(BBB, 1<<64) * (TTT - AAA)

        BigInteger two_64 = BigInteger.ONE.shiftLeft(64);
        BigInteger BBB_inverse = BigInteger.valueOf(BBB).modInverse(two_64);
        return BBB_inverse.multiply(BigInteger.valueOf(TTT - AAA)).longValue();
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}

这表明答案是-5982727808154625893L。

这仅在 BBB 为奇数时有效。