在 Java 中计算模数
Calculating modulo in Java
我不明白为什么 mod 的计算不正确,
我有 a=23
、b=86609
、c=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);
}
}
我不明白为什么 mod 的计算不正确,
我有 a=23
、b=86609
、c=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);
}
}