Java 参数为13和30的Pow()函数失败

Java 参数为13和30的Pow()函数失败,java,function,pow,Java,Function,Pow,我有一个小问题:如果我用java计算13^30 mod 31,为什么会得到25的结果?结果应该是1。 请提前通知我们答案。 p、 我在上面写了代码 import java.lang.Math; 公共类HelloWorld { 公共静态void main(字符串[]args) { System.out.println(calculateModulo()); } 公共静态字符串calculateModulo(){ String res=新字符串(); 对于(inti=1;i

我有一个小问题:如果我用java计算13^30 mod 31,为什么会得到25的结果?结果应该是1。 请提前通知我们答案。 p、 我在上面写了代码

import java.lang.Math;
公共类HelloWorld
{
公共静态void main(字符串[]args)
{
System.out.println(calculateModulo());
}
公共静态字符串calculateModulo(){
String res=新字符串();
对于(inti=1;i<31;i++){
对于(int j=1;j<31;j++){
double var=数学功率((double)i,(double)j);
如果(j==30){
System.out.println(“添加:”+i);
res=res+“”+i;
} 
如果(变量%31==1){
System.out.println(“将“+i+”与“+j+”模31的幂相乘的数字得出“+var%31”);
打破
}
}
}
System.out.println(Math.pow(13,30)+“”+(Math.pow(13,30)%31));//为什么这个“2.619995643649945E33 25.0”的输出是
返回res;
}
}

您正在将这些操作的结果存储在
double
s中。请注意,
double
的长度仅为64字节。无法将1330的结果准确地存储在64字节中。不,编译器也不能用技巧来计算。看

尝试使用
biginger

BigInteger a = new BigInteger("13");
BigInteger b = a.pow(30);
BigInteger c = b.mod(new BigInteger("31"));
System.out.println(c);

您正在将这些操作的结果存储在
double
s中。请注意,
double
的长度仅为64字节。无法将1330的结果准确地存储在64字节中。不,编译器也不能用技巧来计算。看

尝试使用
biginger

BigInteger a = new BigInteger("13");
BigInteger b = a.pow(30);
BigInteger c = b.mod(new BigInteger("31"));
System.out.println(c);

在13^30之后得到的数字太大,无法用int或double表示,因此必须使用biginger。如果你真的想计算,你可以这样做:

BigInteger bf = new BigInteger("13");
BigInteger bf1 = new BigInteger("30");
BigInteger bf2 = new BigInteger("31");
BigInteger p =bf.pow(30);
System.out.println(p.mod(bf2));

在13^30之后得到的数字太大,无法用int或double表示,因此必须使用biginger。如果你真的想计算,你可以这样做:

BigInteger bf = new BigInteger("13");
BigInteger bf1 = new BigInteger("30");
BigInteger bf2 = new BigInteger("31");
BigInteger p =bf.pow(30);
System.out.println(p.mod(bf2));

数字太大,无法准确地存储在内部。所以你得到的是一个四舍五入的结果。您可以尝试使用
biginger
类,或者设计一种更智能的方法来计算该数字的模数。如果所有其他方法都失败了,那么创建一个简单的函数,比如pow,它可以按照您想要的方式处理大数字,这可能是一个好主意。这个数字太大了,无法准确地存储在内部。所以你得到的是一个四舍五入的结果。您可以尝试使用
biginger
类,或者设计一种更智能的方法来计算该数字的模数。如果所有其他方法都失败了,那么创建一个简单的函数(如pow)来处理大量数据可能是一个好主意。