简单算法:快速幂

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年没打过快速幂了,今天来打一下,也是几分钟就写出来了。
如果你真的记不住,打一篇博客,从自己的角度理解一下,就懂了。

原文地址:https://www.cnblogs.com/riced/p/14332472.html