给定 n 组 ai,bi,pi,对于每组数据,求出 ai^bi mod pi 的值。
输入格式第一行包含整数 n。
接下来 n 行,每行包含三个整数 ai,bi,pi。
输出格式对于每组数据,输出一个结果,表示 ai^bi mod pi 的值。
每个结果占一行。
数据范围1 ≤ n ≤ 100000 ,
1 ≤ ai , bi , pi ≤ 2 ×109
2 3 2 5 4 3 9输出样例:
4 1思路 AC代码
#include#include #include #include using namespace std; typedef long long LL; //a^k mod p int qmi(int a,int k,int p) { int res=1%p;//这里要%p,因为当p=1,k=0时,res=1%p的结果是0,而如果写成res=1的话结果就变成了1 while(k)//本质上是求k的二进制表示 { if(k&1)//k&1表示k的个位是1 { res=(LL)res*a%p;//这里模p是为了防止溢出 } k>>=1;//删除k的末尾 a=(LL)a*a%p;//把a变成下一个 } return res;//返回res } int main() { int n; scanf("%d",&n); while(n--) { int a,k,p; scanf("%d%d%d",&a,&k,&p); printf("%dn",qmi(a,k,p)); } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)