快速幂采用的是二分的思想,(a^b)%c,当b比较大时可将其分解,当b为偶数时,(a^b)%c=(a^(b/2)*a^(b/2))%c;当b为奇数时,(a^b)%c=(a^(b/2)*a^(b/2)*a)%c.
模运算:
(a+b)%p=(a%p+b%p)%p;(a-b)%p=(a%p-b%p)%p;(a*b)%p=(a%p*b%p)%p;ab%p=((a%p)b)%p
结合率:((a+b)%p+c)%p=(a+(b+c)%p)%p;((a*b)%p*c)%p=(a*(b*c)%p)%p;
#include
using namespace std;
typedef long long ll;
ll mod(ll a,ll b,ll k)
{
if(b==0) //判断幂为0
return 1;
if(b==1) //判断幂为1
return a%k;
ll c=((a%k)*(a%k))%k; //(a^2)%k
if(b%2==1) //b为奇数
{
c=(a*mod(c,b/2,k))%k;//提取一个a
return c;
}
else
return mod(c,b/2,k); //b为偶数
}
int main()
{
ll a,b,k;
while(cin>>a>>b>>k)
cout<