有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (1) 个答案

  1. # 1 楼答案

    912长时间溢出

    此外,doubleMath.pow会丢失精度,因此会损坏模值。 (如果8字节长溢出,则8字节双精度只能近似值,尤其是丢失最低有效位。)

    可以使用^{}作为直接的解决方案

    您还可以利用a*b%n==((a%n)*(b%n))%n来降低功耗:

    long modPow(int var, int num) {
        long m = 1;
        while (num > 0) {
            m = (m * var) % M;
             num;
        }
        return m;
    }
    

    这不是最好的解决方案,但这个问题充满了数学和数学的味道;编程课, 因为模的知识

    因为M是int,所以返回值可以是int,casted