Tyvj1118乘方取余问题
输入a,n,k(1<=a,n<=1e9 1<=k<=10000 ,
注意:有多组测试数据,请用EOF标志判断结束输入):
2 32 5
2 30 5输出(a^n)%k的结果(a的n次方被k除的余数):
1
4
问题分析:因为存在
若n为偶数:
a^n=(a*a)^[n/2];
若n为奇数:
a^n=a*(a*a)^[n/2];
所以原问题就可以进行简化了
代码如下
#include<iostream>
using namespace std;
int PowerMod(int a, int n, int k)
{
if (n==0)
return 1;
int tmp=PowerMod((a*a)%k, n/2, k);
if(n%2)
tmp=(tmp*a)%k;
return tmp;
}
int main()
{
int a,n,k;
while (cin>>a>>n>>k)
{
cout<<PowerMod(a, n,k)<<endl;
}
return 0;
}

浙公网安备 33010602011771号