我們知道如果用記憶化搜尋逐項遞推可以將複雜度降低到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發現這個盒子被上了鎖,在這個盒子...