acwing 875. 快速幂
题目描述1
给定 n 组 ai,bi,pi,对于每组数据,求出
a
p
i
m
o
d
p
i
a^{p_{i}} mod p_{i}
apimodpi
的值。
输入格式
第一行包含整数 n。
接下来 n行,每行包含三个整数 ai,bi,pi。
输出格式
对于每组数据,输出一个结果,表示 abiimodpi的值。
每个结果占一行。
数据范围
1≤n≤100000
,
1≤ai,bi,pi≤2×109
输入样例
2
3 2 5
4 3 9
输出样例:
4
1
思路
对于a的p次方 p可以用二进制来表示。然后每次我们就只需要计算a的对应的2的幂次方相乘就行。
ac 代码
#include<iostream>
using namespace std ;
int n;
typedef long long ll;
ll quicmi (int a,int j, int k)
{
ll res=1;
while(j) {
if(j&1) res =(ll) res* a % k;
j>>=1;
a= (ll) a * a % k;
}
return res;
}
int main(){
cin>>n;
while(n--){
int i,j,k;
scanf("%d%d%d",&i,&j,&k);
cout<<quicmi(i,j,k)<<endl;
}
}