快速幂算法
快速幂,是为了解决形如\(n^m\)的结果的算法
暴力求它求要\(m\)次运算
但运用快速幂就可以简化为接近\(log(m)\)的时间复杂度
一般来说快速幂会在取模的意义下进行运算
所以pow就会受限,我们需要快速幂来救
(下面的代码就不带取模了啊~)
快速幂有两种求法,方法相近
分别是\(while\)和递归的做法:
\(while\)写法:
int ksm(int x,int y){
int tot=0,tmp=x;
while(y){
if(y%2==1)tot*=tmp;
tmp*=tmp;
y/=2;
}
return tot;
}
递归写法:
int ksm(int x,int y){
if(y==1) return x;
int tmp=ksm(x,y/2);
tmp*=tmp;
if(y&1) tmp*=x;
return tmp;
}
这是一种算法,在很多数论题中会用到
可以说,这是数论题的代码实现的重要基础
所以说,\(why\) \(not\)记住它?
Reality&Imagine