如何用C实现大数的大数次幂及求模

对于表达式(数字均为十进制数): (319570873830358677766204855298122686115^267883928491927118605551155696238269887)/340282366920938463463374607431751499777 该怎么用C编程解决?有什么思路?(a^b表示a的b次幂)


化简,对于
(a^b)%c
如果 a >= c,可以简化为
d = a%c
(d^b)%c
否则可以简化为
( ((a^2)^(b/2))%c   * a ) % c

一直这样化下去,最终为
( x * y ) % c


        // 公式 ( a^b * w ) % c
        a = 319570873830358677766204855298122686115
        b = 340282366920938463463374607431751499777
        c = 340282366920938463463374607431751499777
        w = 1

        if( a >= c )
                a %= c;

        for( ; b>0; )
        {
                w = ( (b%2)*a * w )%c;
                a = (a*a)%c;
                b = b/2;
        }

        return w;

来源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值