java求大数幂次的方法

首 先 , 引 入 问 题 。 求 a b % c 的 值 。 首先,引入问题。求a^b\%c的值。 ab%c
其中
a=72356825451438,
b=53727354327038,
c=27335634901889
首先。a的b次方是一个非常大的值。BigInteger类也不能储存。
所以使用快速幂的方法。连同BigInteger.每次乘方的结果都要模c。并且BigInteger的使用也是值得注意的。

public class SolutionD {
    public static void main(String[] args) {
        BigInteger a=new BigInteger("72356825451438");
        BigInteger b=new BigInteger("53727354327038");
        BigInteger c=new BigInteger("27335634901889");
        System.out.println(pow(a,b,c));
    }

    private static BigInteger pow(BigInteger a, BigInteger b, BigInteger c) {
        BigInteger ans=new BigInteger("1");
        BigInteger one=new BigInteger("1");
        BigInteger two=new BigInteger("2");
        while (!b.equals(BigInteger.ZERO)){
            if(b.mod(two).equals(one)){
                ans=ans.multiply(a).remainder(c);
            }
            a=a.multiply(a).remainder(c);
            b=b.divide(two);
        }
        return ans;
    }
}

注,本人将BigInteger换成了long类型进行测试。发现不对,可能是long类型的计算错误。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值