fn表示數列的第n項
那麼我們如果把fn,fn-1寫成蒟陣的形式,可以按照如下推導過程對這個蒟陣進行拆分,從而寫成便於計算的形式
如圖,這個是可以寫成蒟陣
和相乘的形式的,而
這個蒟陣可以用蒟陣快速冪來計算,具體可以見我的部落格;
下面是**:
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;typedef
long
double
ld;typedef pair
pr;const
double pi=acos(-1
);#define rep(i,a,n) for(ll i=a;i<=n;i++)
#define per(i,n,a) for(ll i=n;i>=a;i--)
#define rep(i,u) for(int i=head[u];i;i=next[i])
#define clr(a) memset(a,0,sizeof a)
#define pb push_back
#define mp make_pair
#define fi first
#define sc secondld eps=1e-9
;ll pp=1000000007
;ll mo(ll a,ll pp)
ll powmod(ll a,ll b,ll pp)
ll read()
//head 從這裡開始哦
struct
matrix;
//注意這裡要用ll保證不會爆
matrix operator *(matrix a, matrix b)
returnc;}
ll k;
intmain()
//乙個快速冪
ll fk = (ans.a[0][0]+ ans.a[0][1])%pp;
cout
/這不是f**k
//o(log b *2^3)
}
P1962 斐波那契數列
f 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 請你求出 f n mod 1000000007 的值。輸入格式 第 1 行 乙個整數 n 輸出格式 第 1 行 f n mod 1000000007 的值 輸入樣例 1 5 輸出樣例 1 5 輸入樣例 2 10 輸出樣例...
P1962 斐波那契數列
傳送門 斐波那契數列 看一眼果斷遞推 f i f i 1 f i 2 嘛 資料一看.好像不行.那就矩陣優化一下嘛 最基礎的矩陣乘法嘛 不懂先學一下 矩陣乘法 吧 稍微想一想 設矩陣為 a 那麼矩陣 f i 2 f i 1 a 要等於 f i 1 f i 即要等於 f i 1 f i 1 f i 2 ...
矩陣 P1962 斐波那契數列
嗯 include include include include include define ll long long using namespace std struct jv a,ans,c ll n,mo 1000000007 jv cheng jv a,jv b int main n 3...