Dev.C++简单算法:快速幂。N年没打博客了,主要是最近没时间。今天带来一篇快速幂。
如果日常的幂运算你打一个for就好了。可是有些 水 题题意翻译成人话就是求解快速幂,那么O(n)绝对会被卡下去。
这里带来一篇简单的O(log n)手打递归快速幂。老规矩,先贴代码。
int qsm(int x,int y)//x的y次方
{
if(y==1)return x;
if(y%2==0)return qsm(x,y/2)*qsm(x,y/2);
else return qsm(x,y/2)*qsm(x,y/2)*x;
}
这里顺便加了使用方法,方便食用。急用的直接拷走就好了。
这里解释一下
当y=1时,易得 (x^y) 为x,所以有了第一句
当指数是偶数时,根据(a^b)×(a^c)为a的b+c次方,所以
$x^y$=x^y/2 × x^y/2
故此第二句出现了,第三句同理。这就是这篇博客的全部内容了。
说句闲话,我认为快速幂没必要背。像我N年没打过快速幂了,今天来打一下,也是几分钟就写出来了。
如果你真的记不住,打一篇博客,从自己的角度理解一下,就懂了。