题解 P1226 【取余运算||快速幂】

· · 题解

快速幂模板题(只是单纯的求快速幂)

快速幂原理:

对于a^b来说,

如果b%2==1,那么b=2 * n+1(n是非负整数),

则a^b=(a^n)^2*a.

如果b%2==0,那么b=2 * n

则a^b=(a^n)^2;

快速幂取模:

对于c=a*b来说,c%k = (a*b)%k = (a%k) * (b%k) % k

所以在运算快速幂取模时,可以用递归或递推,用log2n的时间算出 a^b%k

#include<bits/stdc++.h>
using namespace std;
long long b,a,p,k,ans=1,c;
int main()
{
    scanf("%d%d%d",&b,&p,&k);
    a=b;c=p;
    while(p>0)
    {
        if(p%2!=0)
            ans=ans*b%k;
        b=b*b%k;
        p=p/2;
    }
    ans%=k;
    printf("%d^%d mod %d=%d",a,c,k,ans);
    return 0;
}