快速幂

    神奇的快速幂

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

其时间复杂度为 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¹¹转化为算
 a^(2^0)  * a^ (2^1)  * a^ (2^3),即 a^1 * a^2 * a^8,这样只需要计算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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值