版权声明:个人笔记,仅供复习 https://blog.csdn.net/weixin_42373330/article/details/82839057
描述:
输入正整数a,n和m,输出mod m的值。a,n,m<=1e9。
分析:
很容易写出下面的代码:
int pow_mod(int a,int n,int m)
{
int ans=1;
for(int i=0;i<ans;i++) ans=(int)((long long )ans*n%m);
}
接下来可以用分治法优化上面的代码:
#include <stdio.h>
#include <string.h>
int pow_mod(int a,int n,int m)
{
if(n==0) return 1;
int x=pow_mod(a,n/2,m);
long long ans=(long long )x*x%m;
if(n%2==1) ans=ans*a%m;
return (int)ans;
}
int main()
{
printf("%d\n",pow_mod(2,3,5));
return 0;
}
例如,,而,一共只用了7次乘法。这个与快速幂的算法是一样的