1.问题描述
求a 的 b 次方对 c 取余的值。
输入:第一行输入一个整数 n ,表示测试数据的组数(n <100),每组数据只有一行,其中有三个正整数 a,b,c(1 ≤a,b,c≤10000000000)
输出:a的b次方对c取余之后的结果。
样例输入:
3
2 3 5
3 100 10
11 12345 12345
样例输出:
3
1
10481
2.解决方法
1)将幂拆解为多个底数的平方次的积;
2)如果指数为偶数,把指数除以2,并让底数的平方次取余 ;
3)如果指数为奇数,就把多出来的底数记录下来,再执行偶数次操作。
3.代码实现
#include
using namespace std;
long long PowerMod(long long a,long long b,long long c)
{
long long ans = 1;
while(b)
{
if(b % 2)
ans *= a %c;
a = a*a%c;
b /= 2;
}
ans %= c;
return ans;
}
int main()
{
int T;
cin>>T;
while(T--)
{
long long a,b,c,ans;
cin>>a>>b>>c;
ans = PowerMod(a,b,c);
cout<