快速幂第一章(C++递归版本)

快速幂第一章(C++递归版本)

当题目要我们求类如 a b = ? a^b=? ab=?的题目时,最直接,最暴力的写法如下:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
int main() {
   
   
    LL a,b,res=1;
    cin>>a>>b;
    while(b--) {
   
   
        res*=a;
    }
    cout<<res;
}

算法简单明了,循环 b b b次,每次答案 × a ×a ×a。而这类代码,往往是TLE。

TLE很好理解。这段代码的时间复杂度是 O ( b ) O(b) O(b)。当b的数据范围很大时自然会超时。

时间复杂度如何计算可以参考编者的另一篇博客 O O O时间复杂度详解


关于幂的知识

  1. a b = a × a × . . . × a × a a^b=a×a×...×a×a ab=a×a×...×a×a b b b a a a相乘)
  2. a x × a y a^x×a^y ax×ay
    = a × a × . . . × a \red a\red ×\red a\red×\red.\red.\red.\red×\red a a×a×...×a ( x (x (x a ) a) a) × × × a × a × . . . × a × a \blue a\blue ×\blue a\blue ×\blue .\blue .\blue .\blue ×\blue a\blue ×\blue a a×a×...×a×a ( y (y (y a ) a) a)
    = ( x + y ) (x+y) (x+y) a a a相乘的积
    = a a ax+y
    例如 2 3 ∗ 2 5 = 2 8 2^3*2^5=2^8 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值