M斐波那契數列

2021-07-05 21:39:12 字數 1175 閱讀 1342

(使用費馬小定理降冪處理以及矩陣的快速冪求法)

m斐波那契數列f[n]是一種整數數列,它定義如下:

f[0] = a

f[1] = b

f[n] = f[n-1] * f[n-2] (n>1)

現在,寫出f[2]、f[3]、f[4]的值,可以發現,其中,a,b的指數均為斐波那契數,歸納法得 :

f[n] = a^fib[n-1] *b^fib[n]

費馬小定理:

a^b%c = a^(b%(c-1))%c (c是質數,且a、c互質)

所以f[n] = (a^(fib[n-1]%(c-1)%c) * (b^(fib[n]%(c-1))%c)

而對於斐波那契數列fib[n] = fib[n-1] + fib[n-2]是乙個二階遞推數列,所以存在乙個2*2的矩陣a,使得 :(f

nfn−

1)=(

fn−1

fn−2

)∗a

求解,a得到: [1

110]

input:

a、b、n

output:

f[n],若f[n]過大,輸出f[n]對1000000007取模

#include const

long

long m=1000000007;

class matrix

//設為單位矩陣

void setidentity()

//設為2*2矩陣a

/**

* [ 1 1 ]

* [ 1 0 ]

*/void setdefault()

};matrix fib(int n)

return ans;

}long

long quickpow(long

long x,long

long y)

return res;

} int main()

return

0;}

M斐波那契數列

題目描述 m斐波那契數列f n 是一種整數數列,它的定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值嗎?0 a,b,n 10 9 由於f n 可能很大,你只需輸出f n 對1000000007取模後的值即可 題解 列出f n 的前幾項...

M斐波那契數列

m斐波那契數列f n 是一種整數數列,它的定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值嗎?input 輸入包含多組測試資料 每組資料佔一行,包含3個整數a,b,n 0 a,b,n 10 9 output 對每組測試資料請輸出乙個整...

M斐波那契數列

m斐波那契數列f n 是一種整數數列,它的定義如下 f 0 a f 1 b f n f n 1 f n 2 n 1 現在給出a,b,n,你能求出f n 的值嗎?第一行,包含3個整數a,b,n 0 a,b,n 10 9 輸出乙個整數f n 由於f n 可能很大,你只需輸出f n 對1000000007...