对于有大量打交道时的一些原因,模运算符犯规给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
输出应该是2790
,但输出为887.0
我相信它的一些愚蠢的,但我不能绕过它。 提前致谢
对于有大量打交道时的一些原因,模运算符犯规给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
输出应该是2790
,但输出为887.0
我相信它的一些愚蠢的,但我不能绕过它。 提前致谢
的结果Math.pow(65, 17)
不能被精确地表示为一个double
,并且越来越四舍五入到最接近的数即可。
的pow(a, b) % c
操作称为“模幂”。 在维基百科页面包含了很多的想法,你会如何去计算它。
这是一种可能性:
public static int powmod(int base, int exponent, int modulus) {
if (exponent < 0)
throw new IllegalArgumentException("exponent < 0");
int result = 1;
while (exponent > 0) {
if ((exponent & 1) != 0) {
result = (result * base) % modulus;
}
exponent >>>= 1;
base = (base * base) % modulus;
}
return result;
}
您可以使用int这样
int n = 65;
for (int i = 1; i < 17; i++)
n = n * 65 % 3233;
System.out.println(n);
或者喜欢的BigInteger
System.out.println(BigInteger.valueOf(65).pow(17).mod(BigInteger.valueOf(3233)));
两个打印
2790