#include<bits/stdc++.h>
using namespace std;
long long x,y,z;
long long fz(long long a,long long b,long long c)
{
if(b==0) return 1;
if(b%2==1) return fz(a,b/2,c)*x%c*fz(a,b/2,c)%c;
return (fz(a,b/2,c)*fz(a,b/2,c))%c;
}
int main()
{
cin>>x>>y>>z;
cout<<x<<"^"<<y<<" mod "<<z<<"="<<fz(x,y,z);
return 0;
}
long long fun(long long b, long long p, long long k){
if(p == 1) return b % k;
return (fun(b, p / 2, k) % k * fun(b, p / 2, k) % k) % k;
}
为了处理当 p 出现奇数的情况,可在返回值处添加如下表达式:
(p % 2 == 0 ? 1 : b % k)
即当 p 为偶数时返回 1 ,否则返回 b % k
在 return 处,调用了 fun 函数两次,不妨优化一下
long long fun(long long b, long long p, long long k){
if(p == 1) return b % k;
int t = fun(b, p / 2, k) % k;
return (t * t * (p % 2 == 0 ? 1 : b % k)) % k;
}
#include<bits/stdc++.h>
using namespace std;
long long x,y,z;
long long fz(long long a, long long b, long long c)
{
if(b==1) return a%c;
int t=fz(a,b/2,c)%c;
return (((t*t)%c)*(b%2==0?1:a%c))%c;
}
int main()
{
cin>>x>>y>>z;
cout<<x<<"^"<<y<<" mod "<<z<<"="<<fz(x,y,z);
return 0;
}