經常會遇到求冪,按照常規操作,就會超時,現在寫兩個簡單的整數快速冪和矩陣快速冪供自己以後參考。
整數快速冪:
def
quickpow
(a,n)
: res =
1while
(n):
if n%2!=
0:res *= a
a *= a #翻倍
n >>=1
#二進位制右移一位
return res
a,n =
map(
int,
input()
.split())
print
(quickpow(a,n)
)
矩陣快速冪:#以2x2矩陣相乘為例
m =[[1
for i in
range(2
)]for j in
range(2
)]m[1
][1]
=0n =int
(input()
)def
mulmatrix
(x,y)
:#定義二階矩陣相乘的函式
ans =[[
0for i in
range(2
)]for j in
range(2
)]for i in
range(2
):for j in
range(2
):for k in
range(2
):ans[i]
[j]+= x[i]
[k]* y[k]
[j]return ans
defquickmatrix
(m,n)
: e =[[
0for i in
range(2
)]for j in
range(2
)]#先定義乙個單位矩陣
for i in
range(2
):e[i]
[i]=
1while
(n):
if n %2!=
0:e = mulmatrix(e,m)
m = mulmatrix(m,m)
n >>=1
return e
print
(quickmatrix(m,n)
)
矩陣快速冪思想和整數快速冪一樣,只不過要多定義乙個矩陣乘法的例子,我的**裡面給的比較簡單,可以參考個思路 快速冪(整數快速冪 矩陣快速冪)
1 整數快速冪 例如求x 8 就是x x x x x x x x 正常的運算方式是,x的值乙個個往上乘上去,乘法運算執行7次 x x x x x x x x 也可以採用這種運算方式,先進行乘法得到x 2再對x 2進行三次乘法。這種運算要明顯比第一種情況要快 所以對於整數快速冪,也是結合了這種思想 x...
快速冪計算(整數快速冪 矩陣快速冪)
快速冪計算 樸素演算法實現 1 ll get pow ll x,ll n 這裡的n要求不小於0,如果n小於0則令n n,並且最終返回1.0 ans即可 29 return ans 10 快速冪演算法 原理 二分 假設我們現在要計算pow x,n 那麼有當n為偶數時pow x,n pow x x,n ...
整數的冪運算 快速冪
題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。一開始最簡單的思路是,用乙個while迴圈直接乘出結果,太簡單 就不貼了,複雜度是o n 發現有更快的演算法,叫快速冪,複雜度為o lgn public class solutio...