大家都知道 fibonacci 數列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2。
現在問題很簡單,輸入 n 和 m,求 fn 的前 n 項和 snmodm。
輸入格式
共一行,包含兩個整數 n 和 m。
輸出格式
輸出前 n 項和 snmodm 的值。
資料範圍
1≤n≤2000000000,
1≤m≤1000000010
輸入樣例:
5 1000
輸出樣例:
12解析:
fn = [ f n f n + 1 s n ]
[fnfn+1sn]
[fnfn+1sn]
fn+1 = [ f n + 1 f n + 2 s n + 1 ]
[fn+1fn+2sn+1]
[fn+1fn+2sn+1]
[ f n f n + 1 s n ]
[fnfn+1sn]
[fnfn+1sn]* [ 0 1 0 1 1 1 0 0 1 ]
⎡⎣⎢010110011⎤⎦⎥
⎣⎡010110011⎦⎤ = [ f n + 1 f n + 2 s n + 1 ]
[fn+1fn+2sn+1]
[fn+1fn+2sn+1]
這要推出係數矩陣即可。
#include
using
namespace std;
int n, m;
void
mul(
int c,
int a,
int b[
3]);
for(
int i =
0; i <
3; i++)}
memcpy
(c, temp,
sizeof temp);}
void
mul(
int c[
3],int a[
3],int b[
3]);
for(
int i =
0; i <
3; i++
)for
(int j =
0; j <
3; j++)}
memcpy
(c, temp,
sizeof temp);}
intmain()
;int a[3]
[3]=
,,};
cin >> n >> m;
while
(n) cout << f[2]
<< endl;
}
斐波那契數列的前n項值
description 輸入n,求斐波那契數列前n項的值。斐波那契數列規律如下 1,1,2,3,5,8,13,21,34,55 從第三項開始,每一項都是前面兩項的和。input 輸入正整數n。output 輸出斐波那契數列的前n項值 sample input13 58sample output 11...
斐波那契數列第n項
1 斐波那契數列第n項 在斐波那契數列中,fib0 0,fib1 1,fibn fibn 1 fibn 2 n 1 給定整數n,求fibn mod10000。輸入格式 輸入包含多組測試用例。每個測試用例佔一行,包含乙個整數n。當輸入用例n 1時,表示輸入終止,且該用例無需處理。輸出格式 每個測試用例...
python列印斐波那契數列前n項或第n項
nterms int input 你需要幾項?第一和第二項 n1 0 n2 1 count 2 判斷輸入的值是否合法 if nterms 0 print 請輸入乙個正整數。elif nterms 1 print 斐波那契數列 print n1 else print 斐波那契數列 print n1,n...