题目描述
知识点
快速幂(好难证明啊)
我的实现
码前思考
不会写
代码实现
//经过证明,这是一道快速幂的题目
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll binaryPow(ll x,ll y,ll k){
//printf("%lld\n",k);
if(y==0){
return 1;
}else{
if(y&1==1){
return (x*binaryPow(x,y-1,k))%k;
}else{
ll mul = binaryPow(x,y/2,k);
return (mul*mul)%k;
}
}
}
int main(){
ll x,y,k;
while(scanf("%lld %lld %lld",&x,&y,&k)!=EOF){
x=x%(k-1);
ll res = binaryPow(x,y,k-1);
if(res==0){
res=k-1;
}
printf("%lld\n",res);
}
return 0;
}
码后反思
证明如下:
需要注意的是,当最后取模的结果是0
时,输出的结果应该时k-1
才对,我写得时候忽视了这一点,所以一直没有过样例。