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; }