Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大量工作_Java_Bigdecimal - Fatal编程技术网

Java 大量工作

Java 大量工作,java,bigdecimal,Java,Bigdecimal,当我用Java进行以下计算时,(97^23)mod 187: double ret = (Math.pow (97, 23))% 187; ret值为74。(Math.Pow(97,23))的值是4.963064143419832E45 我的问题是:表达式的值(97^23)mod 187=58。尝试使用windows计算器。我尝试使用BigDecimal,但仍然无法获得所需的值 在windows计算器中生成(97^23),它将返回4.963064143419831996986398968091

当我用Java进行以下计算时,
(97^23)mod 187

double ret = (Math.pow (97, 23))% 187;
ret值为
74
(Math.Pow(97,23))
的值是
4.963064143419832E45

我的问题是:表达式的值
(97^23)mod 187=58
。尝试使用windows计算器。我尝试使用
BigDecimal
,但仍然无法获得所需的值

在windows计算器中生成
(97^23)
,它将返回
4.9630641434198319969863989680919+45
,因此更加精确


如果有人能帮助我,非常感谢

你试过把问题分解成因数吗?i、 e.r=(r*97)%187;重复23次?下面是一些伪Java(我附近没有编译器来验证语法,但我用另一种语言测试了逻辑,似乎还可以):


abmodn(97,23,187)
返回
58

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

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

要以整数形式获得结果,可以使用
intValue()
方法。

对于该大小的数字,如果没有舍入错误,则无法进行浮点计算(请参阅)。 即使您在技术上不需要
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
 } }

@显示的那个?我需要值58。@乔尼帮了我。谢谢!非常感谢!这就是我需要的!我也会试试这个。谢谢。我想你知道,通常情况下,幂的计算方法是幂除以2,然后乘以结果(
O(对数幂)
,而不是
O(幂)
)…还有-有什么特别的原因要做
r=1%n
而不是
r=1
?Alexei,我的回答旨在提供信息而不是最佳答案。r=1%n旨在强化r=(r*a)%n模式,并使用int类型解决问题。
 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
 } }