1

当我(97 ^ 23) mod 187在 Java 中进行以下计算时:

double ret = (Math.pow (97, 23))% 187;

ret 值为74. 的(Math.Pow (97, 23))值为4.963064143419832E45;

我的问题如下:表达式的值(97 ^ 23) mod 187 = 58。尝试做windows计算器。我已经尝试使用BigDecimal但仍然无法获得我需要的价值。

(97 ^ 23)在 windows 计算器中制作它会返回4.9630641434198319969863989680919 +45并且更加精确。

如果有人可以帮助我,非常感谢!

4

3 回答 3

2

模块化电源在BigInteger类中实现:

BigInteger a = new BigInteger("97");
BigInteger x = new BigInteger("23");
BigInteger m = new BigInteger("187");
BigInteger result = a.modPow(x, m); // 97^23 % 187

要获得 int 形式的结果,您可以使用该intValue()方法。

于 2013-06-22T23:51:59.857 回答
0

您是否尝试过考虑问题?即 r = (r * 97) % 187;并重复 23 次?这是一些伪Java(我附近没有编译器来验证语法,但我用另一种语言测试了逻辑,看起来还可以):

public static abmodn(int a, int b, int n)
{
  int r = 1 % n;
  while (b-- > 0)
  {
    r = (r * a) % n;
  }
  return r;
}

abmodn(97, 23, 187)返回58

于 2013-06-22T23:49:02.153 回答
0

您不能期望在没有舍入误差的情况下对这种大小的数字进行浮点计算(请参见此处)。即使你在技术上不需要BigDecimal这个,因为你不会有小数,它仍然会正确计算,如下所示:

导入 java.math.BigDecimal;

公共类测试{

 public static void main(String []args){
    BigDecimal bdn = new BigDecimal(97);
    BigDecimal bdx = bdn.pow(23);
    BigDecimal bdr = bdx.remainder(new BigDecimal(187));
    System.out.println("bd3: " + bdr);  // bd3: 58
 } }
于 2013-06-22T23:59:47.657 回答