数学问题(六)——快速幂

方法

  • 对指数进行分解比如求 2 8 2^8 28,可以分解为 8=4+4,4=2+2,2=1+1,只需要累乘三次就可以得到 2 8 2^8 28的值

代码

a b a^b ab末尾的三位数,其中MOD=1000

int FastExponentiation(int a, int b)
{
    int answer = 1;
    while (b != 0)
    {
        if (b % 2 == 1)
        {
            answer *= a;
            answer %= MOD;
        }
        b /= 2;
        a *= a;
        a %= MOD;
    }
    return answer;
}

例题涉及到了快速幂,同时还要分析结果和原始数据的关系
N = a 0 + a 1 ∗ k + . . . + a n ∗ k n , N ′ = a 0 + a 1 + . . . + a n , N − N ′ = a 1 ∗ ( k − 1 ) + . . . + a n ∗ ( k n − 1 ) ( N − N ′ ) % ( k − 1 ) = 0 ⇒ N ′ = N % ( k − 1 ) N = a_0+a_1*k+...+a_n*k^n,\\ N' = a_0+a_1+...+a_n,\\ N-N' = a_1*(k-1)+...+a_n*(k^n-1)\\ (N-N')\%(k-1) = 0 \Rightarrow N' = N\%(k-1) N=a0+a1k+...+ankn,N=a0+a1+...+an,NN=a1(k1)+...+an(kn1)(NN)%(k1)=0N=N%(k1)

参考

root(N,k)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值