题目大意:a,b,c都是2的63次方以内的数,求a的b次方%c。
思路:因为a,b很大,可能会溢出,所以要用快速乘+快速幂,快速乘的原理就是a不断的乘自身,如果b遇到奇数,再单独+一个a
#include<bits/stdc++.h>
using namespace std;
long long a, b, c;
long long mul(long long a1, long long a2)
{
long long sum = 0, q = a2;
while (a1)
{
if (a1 & 1)
{//每出现一次奇数的b,就要单独加上一个a
sum = (sum + q) % c;
}
q = (q + q) % c;//a不断累加自身
a1 >>= 1;
}
return sum % c;
}
long long pow()
{
long long ans = 1,p=a;
while (b)
{
if (b & 1)
{
ans = mul(ans, p);
}
p = mul(p, p);
b >>= 1;
}
return ans % c;
}
int main()
{
while(scanf("%lld %lld %lld",&a,&b,&c)!=EOF)
cout<<pow()<<endl;
}