快速幂

     神奇的快速幂

快速幂顾名思义,就是快速算某个数的多少次幂。

其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

例如  计算result=a^11
普通的方法: 
result=a*a*a..*a*a(11个a相乘) ,计算了11次。
快速幂的方法: 
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
    ,即  ,这样只需要计算4次(2³  2²   2¹ 2º)。
以下是计算n^m次方的快速幂代码:
#include <stdio.h>

int main()
{
    long long  n,m;
    while(scanf("%lld %lld",&n,&m)){
        long long result=1,temp=n;    //temp即模拟二进制从低位到高位
        while(m){           //注意m temp是同步的。
            if(m%2) result*=temp;//若该位为1,则乘一个temp
            temp*=temp;
            m/=2;
        }
        printf("%lld\n",result);
    }
    return 0;
}





你可能感兴趣的:(数学)