快速幂

快速幂

基本思路

x的n次方可以将n转化为二进制数,x的11次方就是x的(1+2+8)次方,

代码实现

\(X^N\)%mod

long long ksm(long long X,long long N,long long mod){
    long long sum=1;
    while(N){
        if(N&1)
            sum=sum*X%mod;
        X=X*X%mod;
        N/=2;
    }
    return sum;
}

相当于求N的二进制数

逆元

含义

逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。

用途

当我们要求(a/b) mod p的值,且a很大,大到会溢出;或者说b很大,达到会爆精度。无法直接求得a/b的值时,我们就要用到乘法逆元。
a/b取模等于a*k取模那么k就等于b的mod-2次方

long long ksm(long long X,long long N,long long mod){
    long long sum=1;
    N=mod-2;
    while(N){
        if(N&1)
            sum=sum*X%mod;
        X=X*X%mod;
        N/=2;
    }
    return sum;
}
posted @ 2022-07-13 19:23  zyzzzzlh  阅读(89)  评论(1)    收藏  举报