You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java计算1020^275 mod 1073结果错误,求解决方法

解决Java中大指数模运算结果错误的问题

嘿,你这明显是踩了两个Java运算里的经典坑!咱们先搞清楚问题出在哪,再给你靠谱的解决办法:

问题根源分析

  • 第一个坑:^不是幂运算符:Java里的^是按位异或运算符,不是用来计算幂的!你写的1020^275实际上是把1020和275的二进制位做异或操作,完全不是计算1020的275次方,这肯定出不了正确结果。
  • 第二个坑:double精度不足以处理超大数:就算你换成Math.pow(1020,275),double类型的精度只有64位,根本存不下1020^275这么大的数,计算过程中会丢失大量有效数字,最后取模自然也是错的。

正确的解决方法

方法1:用BigInteger(最省心的方案)

Java的BigInteger类专门用来处理任意大小的整数运算,还自带了模幂运算的方法modPow,完美解决你的问题:

import java.math.BigInteger;

public class Decoder {
    public static void main(String[] args) {
        BigInteger base = BigInteger.valueOf(1020);
        BigInteger exponent = BigInteger.valueOf(275);
        BigInteger mod = BigInteger.valueOf(1073);
        
        // 直接调用模幂方法,一步到位
        BigInteger decoded = base.modPow(exponent, mod);
        System.out.println(decoded); // 输出4,就是你要的正确结果
    }
}

方法2:手动实现快速幂(模幂算法)

如果不想依赖BigInteger,可以手动实现快速幂算法,核心思路是每次运算都取模,避免数值过大溢出,同时利用模运算的性质保证结果正确:

public class Decoder {
    public static void main(String[] args) {
        long base = 1020;
        long exponent = 275;
        long mod = 1073;
        long result = 1;
        
        // 先对base取模,减少初始值大小
        base = base % mod;
        
        while (exponent > 0) {
            // 如果指数是奇数,把当前base乘到结果里并取模
            if (exponent % 2 == 1) {
                result = (result * base) % mod;
            }
            // 指数减半(等价于除以2)
            exponent = exponent >> 1;
            // base平方后取模
            base = (base * base) % mod;
        }
        
        System.out.println(result); // 输出4
    }
}

原理说明

模运算有个关键性质:(a * b) mod m = [(a mod m) * (b mod m)] mod m。利用这个性质,我们在每一步计算时都对中间结果取模,既不会让数值变得过大(避免溢出或精度丢失),又能保证最终结果的正确性。

内容的提问来源于stack exchange,提问作者aankit pokhrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:08:44