题目:输入三个正整数a,p,k,求a(p)%k;
算法分析:
由于数据规模很大,如果直接计算,不仅需要采用高精度而且时间复杂度很大。
已知模运算有如下规则:(a*b)%n=(a%n*b%n)%n a(b)%n=((a%n)(b))%n,因此得到如下的递推公式:
#include<iostream>
using namespace std;
int mod(long long a, long long p, long long k)
{
if (p == 1) return a%k;
if (p%2) return mod(a%k, p-1, k)*a%k;
else return mod((a*a)%k, p/2, k);
}
int main()
{
long long a, p, k;
while (cin>>a>>p>>k)
cout<<mod(a, p, k)<<endl;
}