求m的n次方对去q取余数的结果。
有T组数据;
0<m,n,q<10000000
//分析:
//1.如果按正常的先求次幂,然后再取余数,即便用long long 也不可能存的下,
//2.然而如果用数组,或字符串存储,也是非常耗时的,必定超时.
///3.由于无论先取余数,还是后取余数,都不会影响结果。(ep:假如a%b=c,那么a=x*b+c,其中x=a/b)
//4.所以就应该用到 快幂求模 了.
#include<stdio.h>
int main()
{
int T;
int m,n,q,num;
scanf("%d",&T);
while(T--)
{
num=1;////用num储存 奇数个的元素
scanf("%d%d%d",&m,&n,&q);
m=m%q;//先进行预处理,使得运算数据尽可能小
while(n!=1)a//当元素个数变为1个时,结束循环
{
if(n%2==1)
{
num=num*m;//将多余的单个元素存放到 num中。
num=num%q;//防止num过大,超范围
n--;
}
m=m*m;//每两个元素合为一个元素,使得元素数量减半、
m=m%q;//防止a过大
n=n/2;//元素个数减半,加快运行素度
}
m=m*num;//把多余的数和最后剩下的一个元素合起来
printf("%d\n",m%q);
}
return 0;
}
//哪不清楚就评论一下,会尽量解答的