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

相关文章:

  • 2022-12-23
  • 2022-01-17
  • 2022-12-23
  • 2021-12-05
  • 2021-09-29
  • 2021-07-06
  • 2022-12-23
  • 2021-12-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-07
  • 2021-08-27
  • 2022-12-23
相关资源
相似解决方案