快速幂第一章(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时间复杂度详解
关于幂的知识
- a b = a × a × . . . × a × a a^b=a×a×...×a×a ab=a×a×...×a×a( b b b个 a a a相乘)
- 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