Java 具有8位数字的模幂运算
当指数的基数为8位或更大时,用于查找将一个大数字提升为模的幂的结果的Java程序似乎不起作用 具有8位或更多位数的基数不起作用(根据在线模幂计算器进行检查)Java 具有8位数字的模幂运算,java,exponentiation,modular-arithmetic,Java,Exponentiation,Modular Arithmetic,当指数的基数为8位或更大时,用于查找将一个大数字提升为模的幂的结果的Java程序似乎不起作用 具有8位或更多位数的基数不起作用(根据在线模幂计算器进行检查) publicstaticintmodexp(intb,inte,intm){ 系统输出打印ln(b); int c=1; int e2=0; 当(e2b*c在某些情况下溢出时-例如,当b为11111111时,超过193的任何c值都会溢出。或者从一开始就减少b模m(这样你就不会处理大的数字),或者使用long而不是int来获得中间结果。这是有
publicstaticintmodexp(intb,inte,intm){
系统输出打印ln(b);
int c=1;
int e2=0;
当(e2b*c
在某些情况下溢出时-例如,当b
为11111111时,超过193的任何c
值都会溢出。或者从一开始就减少b
模m
(这样你就不会处理大的数字),或者使用long
而不是int
来获得中间结果。这是有意义的。谢谢!首先减少模m
并不是永久的解决方案,因为m
本身可能有8位数字,允许b
和c
也有8位数字,然后它们的乘积将有大约16位不适合。使用long
很好。b*c
在某些情况下会溢出-例如,当b
为11111111时,超过193的任何c
值都会溢出。或者从一开始就减少b
模m
(这样你就不会处理大数字),或者使用long
而不是int
来获得中间结果。这是有意义的。谢谢!首先减少模m
并不是永久的解决方案,因为m
本身可能有8位数字,允许b
和c
也有8位数字,然后它们的乘积将有大约16位不适合。使用long
可以。
public static int modExp(int b, int e, int m){
System.out.println(b);
int c = 1;
int e2 = 0;
while(e2<e){
e2++;
c = (b*c)%m;
}
if(c<0){
c += m;
}
return c;
}