有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
  }
}

共 (2) 个答案

  1. # 1 楼答案

    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);
        }  
    }
    
  2. # 2 楼答案

    问题不在模数部分。你一进入战俘区就会得到错误的结果

    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;