题目:
就是求求 n^p mod m 的值
其中:
1≤n,m≤10^9
1≤p≤10^{14}
思路:
就是简单的分治加递归,例如2^6 = 222222,我们就可以先算22*2,这样就可以避免数太大超出范围啦
上代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
long long mod(long long n,long long p,long long m)
{
if(p==1)
return n%m;
if(p==0)
return 1%m;
long long t;
if(p%2==1)
{
t = mod(n,p/2,m);
return (((t%m) * (t%m))%m *(n%m))%m;
}
else {
t = mod(n,p/2,m);
return ((t%m) * (t%m))%m;
}
}
int main()
{
long long n,m,p;
cin>>n>>m>>p;
cout<<mod(n,p,m)<<endl;
return 0;
}