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 ...