(使用費馬小定理降冪處理以及矩陣的快速冪求法)
m斐波那契數列f[n]是一種整數數列,它定義如下:現在,寫出f[2]、f[3]、f[4]的值,可以發現,其中,a,b的指數均為斐波那契數,歸納法得 :f[0] = a
f[1] = b
f[n] = f[n-1] * f[n-2] (n>1)
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...