Java 大量工作
当我用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
(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
} }