在 Java 中计算模数

Calculating modulo in Java

我不明白为什么 mod 的计算不正确, 我有 a=23b=86609c=17 其中(d=a^c mod b)。所以根据计算器结果应该是16559 但我得到 49432?

public class Mod {

  public static void main(String[] args) {
    int a=23;
    int b=86609;
    int c=17;
    double d= (Math.pow(a,c)%b);
    System.out.print(d);
  }
}

问题不在模数部分。一到pow部分就得到错误的结果

23^17 准确地说是 1.41050039560662968926103 × 10^23。看看 Java 认为它等于什么:

1.4105003956066297E23

显然这不够精确。

这个问题的解决方案是BigInteger:

BigInteger a = new BigInteger("23");
BigInteger b = a.modPow(new BigInteger("17"), new BigInteger("86609"));
System.out.println(b);

记得import java.math.BigInteger;

23^17 对于双倍来说太大了。用BigInteger计算:

public class Main {

    public static void main(String[] args) {
        int a = 23;
        int b = 86609;
        int c = 17;
        BigInteger big = BigInteger.valueOf(a);
        big = big.pow(c);
        big = big.mod(BigInteger.valueOf(b));
        System.out.print(big);
    }  
}