斐波那契数列

ACM与斐波那契数列

◇◆丶佛笑我妖孽 提交于 2019-11-27 12:40:58
文章目录 斐波那契数列 问题 1 求斐波那契数列的第n项 数列的递推公式 数列的通项公式 斐波那契数列的一些性质 斐波那契数列 问题 1 求斐波那契数列的第n项 51nod1242 斐波那契数列的第N项 数列的递推公式 F 0 = 0 , F 1 = 1 F n = F n − 1 + F n − 2 F_0 = 0,F_1 = 1\newline F_n = F_{n-1}+F_{n-2} F 0 ​ = 0 , F 1 ​ = 1 F n ​ = F n − 1 ​ + F n − 2 ​ A = [ F ( n + 1 ) F ( n ) 0 0 ] = [ F ( 1 ) F ( 0 ) 0 0 ] [ 1 1 1 0 ] n − 1 A=\\ \begin{bmatrix} F(n+1)&F(n)\\ 0&0 \end{bmatrix}= \begin{bmatrix} F(1)&F(0)\\ 0&0 \end{bmatrix} \begin{bmatrix} 1&1\\ 1&0 \end{bmatrix}^{n-1} A = [ F ( n + 1 ) 0 ​ F ( n ) 0 ​ ] = [ F ( 1 ) 0 ​ F ( 0 ) 0 ​ ] [ 1 1 ​ 1 0 ​ ] n − 1 struct Matrix { int n , m ; # define

51Nod 1242 斐波那契数列的第N项

跟風遠走 提交于 2019-11-27 08:35:45
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...) 给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。 收起 输入 输入1个数n(1 <= n <= 10^18)。 输出 输出F(n) % 1000000009的结果。 输入样例 11 输出样例 89 代码如下: #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath> #include <algorithm> typedef long long ll; using namespace std; const ll MOD=1e9+9; //定义一个结构体,存放矩阵,方便调用 struct matrix{ ll m[2][2]; }; //矩阵相乘 matrix mat_multi(matrix a,matrix b){ matrix c; for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ c.m[i][j]=0; for(int k=0;k

剑指offer-2:斐波那契数列

二次信任 提交于 2019-11-27 07:57:21
二、斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 1.递归法 1). 分析 斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 根据公式可以直接写出: 2). 代码 public class Solution { public int Fibonacci(int n) { if(n<=1){ return n; } return Fibonacci(n-1) + Fibonacci(n-2); } } 3). 复杂度 时间复杂度:O(2^n) 空间复杂度:O(1) 2. 优化递归 1). 分析 递归会重复计算大量相同数据,我们用个数组把结果存起来8! 2). 代码 public class Solution { public int Fibonacci(int n) { int ans[] = new int[40]; ans[0] = 0; ans[1] = 1; for(int i=2;i<=n;i++){ ans[i] = ans[i-1] + ans[i-2]; } return ans[n]; } } 3). 复杂度: 时间复杂度:O(n) 时间复杂度:O(n) 3. 优化存储 1). 分析

【洛谷P1962】斐波那契数列

帅比萌擦擦* 提交于 2019-11-26 23:38:42
Description 给定n,求斐波那契数列第n项对1e9+7取模的值 Solution 由于数据太大,朴素的递推会超时,所以我们考虑用矩阵优化。 首先我们要明确矩阵乘法的运算法则,假设A是一个n*m的矩阵,B是一个m*p的矩阵,C是一个n*p的矩阵且满足C=A*B,那么存在 $$C_{i,j}=\sum\limits_{k=1}^{m}{A_{i,k}*B_{k,j}}$$ 举一个简单的例子就能直观的反映这个式子: $$ \left[ \begin{matrix} 2 & 3 \\ 4 & 5 \end{matrix} \right] \times \left[ \begin{matrix} 6 \\ 7 \end{matrix} \right] = \left[ \begin{matrix} 2*6+3*7 \\ 4*6+5*7 \end{matrix} \right] $$ 然后我们考虑如何优化斐波那契数列 Code 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int mod = 1e9 + 7; 4 typedef long long ll; 5 ll n; 6 struct Matrix { 7 ll m[3][3]; 8 Matrix() { 9 memset(m, 0, sizeof(m));

P1349 广义斐波那契数列

家住魔仙堡 提交于 2019-11-26 18:02:23
题目描述 广义的斐波那契数列是指形如 an=p×an−1+q×an−2an=p\times a_{n-1}+q\times a_{n-2} a n = p × a n − 1 ​ + q × a n − 2 ​ 的数列。今给定数列的两系数 pp p和 qq q,以及数列的最前两项 a1a_1 a 1 ​ 和 a2a_2 a 2 ​ ,另给出两个整数 nn n和 mm m,试求数列的第 nn n项 ana_n a n ​ 除以 mm m的余数。 输入格式 输入包含一行6个整数。依次是p,q,a1​,a2​,n,m,其中在p,q,a1​,a2​整数范围内,n和m在长整数范围内。 输出格式 输出包含一行一个整数,即an除以m的余数。 输入输出样例 输入 #1 1 1 1 1 10 7 输出 #1 6 说明/提示 数列第10项是55,除以7的余数为6。 思路 F(n)=p*F(n-1)+q* F(n-2) 数据量太大,还是使用矩阵加速,看一下这次的递推矩阵 |F(n),F(n-1)|=|F(n-1),F(n-2)|*|p,1||q,0| 套路简单,根据递推矩阵初始化就行了 代码: #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace

使用高精度计算斐波那契数列 c++

血红的双手。 提交于 2019-11-26 17:25:16
使用高精度计算斐波那契数列 非高精度 Code(Non-high accuracy) 这是不用高精度的代码 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 // freopen("斐波那契数列short_output.out","w",stdout); 6 unsigned long long x=1,y=1,t; 7 cout<<x<<endl<<x<<endl; 8 while(x<12200160415121876738) 9 { 10 t=x; 11 x=x+y; 12 y=t; 13 cout<<x<<endl; 14 } 15 cin.get(); 16 return 0; 17 } 计算结果 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987 17 1597 18 2584 19 4181 20 6765 21 10946 22 17711 23 28657 24 46368 25 75025 26 121393 27 196418 28 317811 29 514229 30 832040 31 1346269 32 2178309 33 3524578 34

牛客刷题之斐波那契数列

情到浓时终转凉″ 提交于 2019-11-26 07:31:16
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 解题思路:使用递归的思想即可。 public class Solution { public int Fibonacci(int n) { return Febo(n); } static int Febo(int n){ if(n <3 ){ if(n==2) return 1; return n; } return Febo(n-1)+Febo(n-2); } } 来源: https://blog.csdn.net/qq_40651109/article/details/98765347