Fibonacci高階問題 矩陣連乘P1

2021-09-25 06:33:10 字數 1809 閱讀 4290

第乙個是斐波那契數列的定義式,

第二個是解不定方程得到的公式(離散上講過),

第三個是斐波那契的矩陣求解公式(參照:

二、 問題實戰:

1. fibonacci again:這題比較簡單,取模打表即可。

#include #include using namespace std;

int fibo[1000005];

int main()

}

2. hat's fibonacci:斐波那契&大數加法。

#include #include using namespace std;

const int n=1e8;

int fibo[8000][255]; //題目說最多2005位,也就是10^2005,約等於2^8000,乙個int可以存8位,255足夠

int main()

}int n;

while(scanf("%d",&n)!=-1)

printf("\n");}}

3. fibonacci:首先要明白大數的前n位怎麼求:

例如123456789的前3位

由 log10(123456789) = log10(1.23456789*10^8) = log(1.23456789) + 8

令 x=log(1.23456789)

則 floor(10^x * 1000)  即為123456789的前三位。

對於這道題,由第乙個公式知 lim n->∞ f(n) = 1/sqrt(5) * ((1+sqrt(5))/2)^n

則f(n)的前3位就可以表示為: floor(pow(10,(log10(f(n)) - floor(log10(f(n))))*1000)*1000)

即 x=log10(1/sqrt(5) + n*log10((1+sqrt(5))/2),x-=floor(x),x=(int)(1000*pow(10,x))

4. fibonacci numbers:求前4位依然用公式2的方法,後四位採用公式3進行矩陣連乘。

#include #include #include using namespace std;

typedef structmatrix;

matrix p = ;

matrix i = ;

matrix matrixmul(matrix a,matrix b)}}

return c;

}matrix quickpow(int n)

return b;

}int fibo[39];

int main()}}

Fibonacci(矩陣快速冪)

菲波那契數列是指這樣的數列 數列的第乙個是0和第二個數是1,接下來每個數都等於前面2個數之和。給出乙個正整數a,要求菲波那契數列中第a個數的後四位是多少。input 多組資料 1結束 範圍1 10 9 output 第x項的後4位 sample input09 999999999 100000000...

Fibonacci 矩陣乘法入門

fibonacci 題意 求斐波那契的第n項,0 n 1e9 思路 設f n 2 為乙個1 2的矩陣,表示斐波那契的第n項和第n 1項,那麼求它的下一項就是乘乙個2 2的矩陣 然後就是矩陣快速冪做就好了 include include include include using namespace ...

Fibonacci 矩陣快速冪

請輸出 fib n mod 10000 n leq 1000000000 由於 n 的範圍在 1e9 直接遞推鐵tle,考慮矩陣快速冪 fibonacci數列有如下性質 通過多次迭代 算是個板子題吧,記得在wust新生賽做過一道想矩陣快速冪的題,然而正解是找規律qaq,在此貼個板子。include ...