第乙個是斐波那契數列的定義式,
第二個是解不定方程得到的公式(離散上講過),
第三個是斐波那契的矩陣求解公式(參照:
二、 問題實戰: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 ...