题目
当y很大,采用如下方式
第一行输入t
。
t行,每行有三个整数x(
),y(
),p(
)。
输出
的值。
样例输入
1
2 10 10000
样例输出:
1024
分析与解答:
直接用递归,log(n)的时间复杂度。
这里注意%p因为p有可能是1,所以每个都要加%p,还有,尽量每个数都加上%p,如果k*k%p*x%p;
少了中间那个%p,就出错了
#include<iostream>
using namespace std;
long long f(long long x,long long y,long long p){
if(y==0) return 1%p;
else if(y%2==0) {
long long k=f(x,y/2,p);
return k*k%p;
}
else {
long long k=f(x,y/2,p);
return k*k%p*x%p;
}
}
int main(){
int t;cin>>t;
while(t--){
long long x,y,p;
cin>>x>>y>>p;
cout<<f(x,y,p)<<endl;
}
return 0;
}