斐波那契数列

2020牛客寒假算法基础集训营1 J题 u's的影响力【矩阵快速幂+欧拉降幂】(全网最详细题解,完整思路)

妖精的绣舞 提交于 2020-02-24 23:17:47
题目传送门: https://ac.nowcoder.com/acm/contest/3002/J 牛客“基础”算法训练营出的题很有意思啊,非常适合我这种萌新学习(真的十分“基础”,我差点就信了)。 今天终于把这题给补了,这相当于是一个模板套模板的题,下面说说我的思路。 完整思路: 首先写出前几项的表达式,找一下规律。 f ( 1 ) = x f(1)=x f ( 1 ) = x f ( 2 ) = y f(2)=y f ( 2 ) = y f ( 3 ) = x 1 ∗ y 1 ∗ ( a b ) 1 f(3)=x^1*y^1*(a^b)^1 f ( 3 ) = x 1 ∗ y 1 ∗ ( a b ) 1 f ( 4 ) = x 1 ∗ y 2 ∗ ( a b ) 2 f(4)=x^1*y^2*(a^b)^{2} f ( 4 ) = x 1 ∗ y 2 ∗ ( a b ) 2 f ( 5 ) = x 2 ∗ y 3 ∗ ( a b ) 4 f(5)=x^2*y^3*(a^b)^{4} f ( 5 ) = x 2 ∗ y 3 ∗ ( a b ) 4 f ( 6 ) = x 3 ∗ y 5 ∗ ( a b ) 7 f(6)=x^3*y^5*(a^b)^{7} f ( 6 ) = x 3 ∗ y 5 ∗ ( a b ) 7 f ( 7 ) = x 5 ∗ y 8 ∗ ( a b )

剑指offer系列 10|1.2

我只是一个虾纸丫 提交于 2020-02-18 02:03:18
面试题10.1 斐波那契数列 题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路:采用递归的思想 斐波那契数列定义:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. class Solution { public : int Fibonacci ( int n ) { int f = 0 , g = 1 ; while ( n -- ) { g + = f ; f = g - f ; } return f ; } } ; 面试题10.2 青蛙跳台阶问题 题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路:斐波那契数列,分开讨论,时间复杂度为O(n),空间复杂度O(n)。 class Solution { public : int jumpFloor ( int number ) { if ( number <= 0 ) { return 0 ; } if ( number == 1 ) { return 1 ; } if ( number == 2 ) { return 2 ; } int first = 1 , second = 2 , third = 0

[Python基础] 4、基础练习

旧时模样 提交于 2020-02-17 19:09:57
1、寻找水仙花数。 说明 :水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:$1^3 + 5^3+ 3^3=153$。 for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3: print(num) 说明: 在上面的代码中,我们通过整除和求模运算分别找出了一个三位数的个位、十位和百位,所以这就学到了一种分离数字各个位的方法。 2、正数的反转 eg:1234 -> 4321 num = int(input('num = ')) #num表示待翻转的数字 Rnum = 0 #Rnum代表反转后的数 while num > 0: Rnum = Rnum * 10 + num % 10 num //= 10 print(reversed_num) 3、百钱百鸡问题。 说明 :百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡

10.斐波那契数列

こ雲淡風輕ζ 提交于 2020-02-14 21:45:10
斐波那契数列 一:斐波那契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N ) * 二:题目描述 求斐波那契数列的第n项(n<39) 三:代码 /* 斐波那契数列 */ public class Demo10 { public static void main ( String [ ] args ) { int fib = fib ( 32 ) ; System . out . println ( fib ) ; int fib2 = fib2 ( 32 ) ; System . out . println ( fib2 ) ; } public static int fib ( int n ) { int [ ] fiba = new int [ n + 1 ] ; fiba [ 0 ] = 1 ; fiba [ 1 ] = 1 ; for ( int i = 2 ; i <= n ; i ++ ) { fiba [ i ]

剑指offer - 斐波那契数列

三世轮回 提交于 2020-02-14 16:28:19
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) 解法:避免使用递归 class Solution { public : int Fibonacci ( int n ) { int one = 0 ; int sum = 1 ; while ( n -- > 0 ) { sum = sum + one ; one = sum - one ; } return one ; } } ; 来源: CSDN 作者: 白羊_Aries 链接: https://blog.csdn.net/qq_38204302/article/details/104312466

[武汉加油] 【全国互虐】Fibonacci矩阵

感情迁移 提交于 2020-02-12 22:03:54
题意: 给定一个 \(k\) 维的 \(n^k\) 的超立方体,超立方体的元素 \(A(i1,i2,...,ik)\) 的值为 \(f(i1+i2+...+ik-k+1)\) ,f为斐波那契数列 求该超立方体的所有元素和 \(1 \le n,k \le 10^9\) 输入样例 3 2 2 4 1 1 3 输出样例 5 7 1 题解 自己好长时间没写题解了,自己好懒啊。 假如k=1,那么就是答案就是斐波那契数列的前缀和。 这里有一个神奇的结论 :设 \(f[i]\) 为斐波那契数列的第 \(i\) 项,则 \(\displaystyle \sum_{i=1}^{n}f[i]=f[n+2]-f[2]\) 我们用矩阵快速幂就能解决啦。 假如k<=100,我们就需要用到一个神奇的结论了:当我们做完一维后,可以把这维看成成一个点,权值是这维的和。 我们先来考虑只有两维的情况,我们求的就是 \(\displaystyle \sum_{i=1}^{n}(\sum_{j=1}^{n}f[i+j])\) ,我们发现我们求完了一维后,将这一维压缩成前缀和后,我们会面临相同的子问题。推广到k维依然适合,所以我们可以用k次快速幂来解决。 假如k更大,我们可以考虑维之间的转化,假如我们求出了转移到下一维的矩阵B,我们用初始矩阵 \(A\) 乘上 \(B^k\) 就能求出来答案。 那B怎么求呢

斐波那契数列

心不动则不痛 提交于 2020-02-11 17:45:00
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。假设n<=39 解题思路: 斐波那契数列:0,1,1,2,3,5,8… 总结起来就是:第一项是0,第二项是1,后续第n项为第n-1项和第n-2项之和。      直接使用简单的循环方法实现 代码实现 package com . letcode . diguixunhuan ; public class No1 { private int feibonaqi ( int n ) { if ( n == 0 ) return 0 ; if ( n == 1 ) return 1 ; int first = 0 , second = 1 , res = 0 ; for ( int i = 2 ; i <= n ; i ++ ) { res = first + second ; first = second ; second = res ; } return res ; } } 来源: CSDN 作者: 小黄学程序 链接: https://blog.csdn.net/weixin_44716359/article/details/104264940

矩阵快速幂小结

旧街凉风 提交于 2020-02-07 18:07:34
update in 9.17 矩阵 并不想扯什么高端线代的内容 因为我也不会 定义 由$n \times m$个数$a_{ij}$排成的$n$行$m$列的数表称为$n$行$m$列的矩阵,简称$n \times m$矩阵。 $$ A = \begin{bmatrix} a_{11} & a_{12} & \dots a_{1m} \\ a_{21}, & \dots & \dots \\ a_{31}, & \dots & \dots \\ a_{41} & \dots & a_{nm} \end{bmatrix} $$ 运算 这里只讲加法减法和乘法,其他的例如矩阵求逆等与本文内容出入较大,有兴趣的可以自己学习 加法 注意,只有行列均相同的矩阵才有加法! 运算也比较简单,把对应位置的数相加得到一个新的矩阵,即为答案 例如 $$ \begin{bmatrix} 1 & 1 & 2 \\ 1 & 0 & 1 \end{bmatrix} + \begin{bmatrix} 2 & 3 & 3 \\ 3 & 3 & 2 \end{bmatrix} = \begin{bmatrix} 3 & 4 & 5 \\ 4 & 3 & 3 \end{bmatrix} $$ 加法满足以下运算律 $A + B = B + A$ $(A + B) + C = A + (B + C)$ 减法 与加法同理。 乘法

2020牛客寒假算法基础集训营1 J题可以回顾回顾

老子叫甜甜 提交于 2020-02-07 15:01:58
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的。 A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的,所以要注意去除这个重复部分的。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; typedef long long ll; const int mod=1e9+7; int main(){ ll n,m,ans=0; scanf("%lld%lld",&n,&m); ans=2*(m-2)%mod*m%mod*(n-1)%mod; ans+=2*(n-2)%mod*n%mod*(m-1)%mod; ans+=2*(m-1)%mod*(m-2)%mod*(n-2)%mod; ans+=2*(n-1)%mod*(n-2)%mod*(m-2)%mod; ans%=mod; printf("%lld\n",ans); return 0; } A B.kotori和bangdream 这个题目也很简单,因为每一个音符的概率都是确定的。。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; typedef long long

10_1、斐波那契数列

≯℡__Kan透↙ 提交于 2020-02-07 07:37:19
斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 思路分析 解法一:根据斐波那契数列的定义方程式写出最直观的递归。效率较低,存在很多重复计算。代码如下: public int Fibonacci ( int n ) { if ( n == 0 ) return 0 ; if ( n == 1 ) return 1 ; return Fibonacci ( n - 1 ) + Fibonacci ( n - 2 ) ; } 解法二:为解决解法一的重复计算,可以把已经计算出来的数列中间项保存起来,用于下一次计算。代码如下: public int Fibonacci ( int n ) { if ( n == 0 ) return 0 ; if ( n == 1 ) return 1 ; int first = 0 , second = 1 , FibN = 0 ; for ( int i = 2 ; i <= n ; i ++ ) { FibN = first + second ; first = second ; second = FibN ; } return FibN ; } 来源: CSDN 作者: 凉薄慕人 链接: https://blog.csdn.net/qq_39018723/article/details/104195960