引入
快速幂取模是一种高效的算法,用于计算大数的幂次并取模的结果,通常用于解决涉及大数幂运算和模运算的问题。在算法竞赛和密码学中,这种算法是非常常见的。
取模运算的常见结论
(a * b) % p = (a % p * b) % p
(a + b) % p = (a % p + b) % p
(a + b) % p = (a % p + b % p) % p
(a - b)% p = (a % p - b % p) % p
(a * b)% p = (a % p * b % p) % p
(这些也在gcd与lcm那一篇提到)
快速幂取模算法的基本思想是将幂次表示为二进制形式,然后利用二进制位上的值来决定是否将底数平方并累乘到结果中。同时,在每一步都进行取模运算,以避免中间结果溢出。
(图源:b站up主五点七边)
基本思路
模板
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fun(ll a,ll b,ll c)
{
ll ans=1;
while(b)
{
if(b%2==1)
{
ans*=a;
ans%=c;
}
b/=2;
a*=a;
a%=c;
}
return ans;
}
int main()
{
int a,b,c;
while(cin>>a>>b>>c)
cout<<fun(a,b,c)<<endl;
return 0;
}