演算法之矩陣快速冪優化

2021-10-09 11:51:58 字數 1782 閱讀 6927

3.斐波那契f(n)=f(n-1)+f(n-3)

4.應用

//這種解法的關鍵在於矩陣的賦值[[1,1],[1,0]],這裡的賦值是比較容易的

#include

using

namespace std;

typedef vectorlong

long

>> vec;

typedef vector<

long

long

> veca;

const

int n=2;

vec fun

(vec a,vec b)}}

return ans;

}vec quick

(int n)

else

else}}

intgetnthnumber

(int n)

intmain()

#include

using

namespace std;

const

int n=2;

typedef vectorlong

long

>> vec;

typedef vector<

long

long

> veca;

vec vec

(n+1

,veca

(n+1,0

));//矩陣乘法

vec fun

(vec a,vec b)}}

return ans;

}//快速冪

vec quick

(int n)

base=

fun(base,base)

; n=n>>1;

}return res;

}int

getnthnumber

(int n)

intmain()

//這種接法的關鍵在於矩陣的賦值[[1,0,1],[1,0,0],[0,1,0]],直接賦值比較容易得到

#include

using

namespace std;

const

int n=3;

typedef vectorlong

long

>> vec;

typedef vector<

long

long

> veca;

vec vec

(n+1

,veca

(n+1,0

));//矩陣乘法

vec fun

(vec a,vec b)}}

return ans;

}//快速冪

vec quick

(int n)

base=

fun(base,base)

; n=n>>1;

}return res;

}int

getnthnumber

(int n)

int mod=

1e9+7;

vec ans=

quick

(n-1);

return

(ans[1]

[1]+ans[2]

[1]+ans[3]

[1])

%mod;

}int

main()

演算法 矩陣快速冪

快速計算矩陣a aa的b bb次方冪 將快速冪演算法中的乘法運算替換為矩陣乘法。若將b bb表示為 pi 2 i sum p i times 2 i pi 2 i 則a ba b ab可以表示為 a 2i p i prod a a2i pi 其中p ip i pi 表示b bb的二進位制從右往左第i...

快速冪(矩陣快速冪)

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...

快速冪 矩陣快速冪

快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...