java中的模10^9+7
我试图使用模10^9+7(或100000007)和一个非常大的long
数,但我没有得到正确的结果
long M = 1000000007;
int num = 212;
int val = 9;
long sol = (long)Math.pow(val,num) % M ;
我应该得到如下输出:
541416750(mod10^9+7)
但我得到的是
291172003
你可以在下面搜索框中键入要查询的问题!
我试图使用模10^9+7(或100000007)和一个非常大的long
数,但我没有得到正确的结果
long M = 1000000007;
int num = 212;
int val = 9;
long sol = (long)Math.pow(val,num) % M ;
我应该得到如下输出:
541416750(mod10^9+7)
但我得到的是
291172003
# 1 楼答案
912长时间溢出
此外,double
Math.pow
会丢失精度,因此会损坏模值。 (如果8字节长溢出,则8字节双精度只能近似值,尤其是丢失最低有效位。)可以使用^{} 作为直接的解决方案
您还可以利用a*b%n==((a%n)*(b%n))%n来降低功耗:
这不是最好的解决方案,但这个问题充满了数学和数学的味道;编程课, 因为模的知识
因为M是int,所以返回值可以是int,casted