利用矩陣快速冪求斐波那契數列

2021-06-18 02:02:52 字數 598 閱讀 8349

我們知道如果用記憶化搜尋逐項遞推可以將複雜度降低到o(n),但是對於更大規模的輸入,這個演算法效率還是不夠高,那麼我們考慮更高效的演算法:

二階遞推:f(n+2)=(1 1) f(n+1)

f(n+1)  (1 0)   f(n)

上面等式兩邊分別是矩陣,那麼矩陣a就是等式右邊第乙個式子。

只要求出a的n次,就可以求出f(n)。我們使用快速冪來求,這個演算法的複雜度為o(logn)

#include #include #include #include using namespace std;

typedef long long ll;

const int mod=10000;

typedef vectorvec;

typedef vectormat;

mat mul(mat &a,mat &b)

} }return c;

}mat pow(mat a,ll n)

else

} return res;

}ll solve(ll n)

int main(){

ll n;

while(cin>>n){

cout<

矩陣快速冪求斐波那契數列

求數a aa的n nn次冪,可以採用二分法進行快速計算,即 a n a cdot a n為偶數 a cdot a cdot a n為奇數 end right.an a n a a a cdot a cdot a cdot a cdots a a cdot a cdot a cdot a 2 cdot...

矩陣快速冪(求斐波那契數列)

矩陣快速冪求斐波那契數列的模板 因為fib n 至於最近的倆個序列有關 及fib n 1 和fib n 2 所以我們儲存最近的那倆個就行了。設f n 表示乙個1 2的矩陣,f n fib n fib n 1 可以看成 a,b a b,b 所以可以變成f n f n 1 a a表示乙個二維矩陣 a 2...

矩陣快速冪 斐波那契數列

time limit 1000 ms memory limit 128 mb 通過小l的不懈努力,他即將成為大神啦,他登上了大神專屬的頒獎臺。在頒獎台上,他即將領取代表著大神的無限榮譽的勳章。小l走上頒獎台後,在台上發現了乙個製作精美的盒子。榮譽勳章就在盒子裡面。小l發現這個盒子被上了鎖,在這個盒子...