洛谷P1962 斐波那契數列 矩陣快速冪

2022-04-30 15:03:13 字數 1294 閱讀 9784

• 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

輸出樣例#2: 複製

55

對於 60% 的資料: n ≤ 92

對於 100% 的資料: n在long long(int64)範圍內。

感覺自己學的一直是假的矩陣快速冪。。。

輔助矩陣為

$\begin 0 & 1 \\ 1 & 1 \end$

#include#include

#define int long long

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)?eof:*p1++)

using

namespace

std;

const

int maxn=101

;const

int mod=1e9+7

;char buf[1

<<20],*p1=buf,*p2=buf;

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,k;

struct

matrix

;

for(int k=1;k<=n;k++)

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

ans.m[i][j]=(ans.m[i][j]+(m[i][k]*a.m[k][j])%mod)%mod;

return

ans;

}

matrix pow(

intp)

return

ans;

}void

print()

};main()

洛谷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 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 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 請你求出 f n mod 1000000007 的值。矩陣快速冪 斐波那契數列通項公式為 f i f i 1 f i 2 相當於dp的轉移方程是一致的,那麼初始矩陣 0 1 不斷去乘上狀態轉移矩陣,即不斷進行矩陣運算,最...