快速幂

来源:互联网 发布:p图很萌的软件 编辑:程序博客网 时间:2024/06/05 11:59
快速幂
快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log?N), 与朴素的O(N)相比效率有了极大的提高。


快速幂实现原理
快速幂的原理比较好懂,就是说假如我们求的是3^11,其实比较通用的办法就是


for(int i=1;i<11;i++)
{
a*=3;
}
时间复杂度为O(n), 那么我们有没有更快的办法呢? 有的~就是下面要说的快速幂。
快速幂就是把指数进行一次log(N)级别的变换。11 = 1011=2^3+2^1+2^0

那么我只需要算3^1和3^2还有3^8这样复杂度就降下来了。算3^1需要一次记为a,把a平方就是3^2记为b,把b平方就是3^4记为c,再平方就是3^8记为d,这样把a b d乘以之后就是结果了。这样速度就快起来了

快速幂代码为:

int pow3(int a,int b){    int ans = 1,base = a;    while(b!=0)    {        if(b&1)            ans *= base;        base *= base;        b>>=1;    }    return ans;}


原创粉丝点击