P1962 斐波那契數列

2022-02-17 20:38:05 字數 1294 閱讀 4010

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