微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java中的模10 ^ 9 + 7

如何解决java中的模10 ^ 9 + 7

我正在尝试使用具有非常大 long 数的模 10^9+7(或 1000000007),但我没有得到正确的结果。

long M = 1000000007;
int num = 212;
int val = 9;
long sol = (long)Math.pow(val,num) % M ; 

我应该得到输出

541416750(mod10^9+7)

但我得到的是

291172003

解决方法

912 溢出很长。

还有 double Math.pow 会失去精度,因此会破坏模值。 (如果 8 字节长溢出,则 8 字节双精度值只能近似值,尤其是丢失最低有效数字。)

可以使用 BigInteger 作为直接解决方案。

你也可以利用 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,强制转换。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。