首页 > 其他分享 >P3986 斐波那契数列

P3986 斐波那契数列

时间:2024-04-17 12:00:37浏览次数:29  
标签:fib int rep P3986 exgcd 斐波 那契

题目链接:P3986 斐波那契数列


推式子

观察题目所给的序列:

根据题意我们可以知道k=f(i-1)+f(i-2)

那么浅浅的推一下就可以发现:

k=f(3)时 k=a+b

k=f(4)时 k=a+2b

k=f(5)时 k=2a+3b

......

故可以得出

k=fib(i)a+fib(i+1)b

因为a,b属于正整数

fib(n-2)+fib(n-1)>k时停止

那么我们只要稍稍枚举一下,并且根据扩展欧几里得求出符合条件的解的个数即可

代码如下

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define int long long
const int mod=1e9+7,N=45;

int k;
int f[N];

int _exgcd_(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1,y=0;return a;
	}
	int d=_exgcd_(b,a%b,x,y);
	int z=x;
	x=y,y=z-y*(a/b);
	return d;
}

signed main()
{
	cin>>k;
	int ans=0;
	f[1]=1,f[2]=1;
	rep(i,3,N)f[i]=f[i-1]+f[i-2];
	int x,y;
	rep(i,2,N)
	{
		if(f[i]+f[i-1]>k)break;
		int a=f[i-1],b=f[i];
		int d=_exgcd_(a,b,x,y);
		x=((x*k)%b+b)%b;
		if(x==0)x=b;
		y=(k-a*x)/b;
		if(y<0)continue;
		ans=(ans+(long long)ceil(1.0*y/a))%mod;
	}
	
	cout<<(ans%mod);
	
	return 0;
}

标签:fib,int,rep,P3986,exgcd,斐波,那契
From: https://www.cnblogs.com/0tAp-Z/p/18140266

相关文章

  • 1137. 第 N 个泰波那契数
    目录题目法一、递归法二、迭代1法三、迭代2题目泰波那契序列Tn定义如下:T0=0,T1=1,T2=1,且在n>=0的条件下Tn+3=Tn+Tn+1+Tn+2给你整数n,请返回第n个泰波那契数Tn的值。示例1:输入:n=4输出:4解释:T_3=0+1+1=2T_4=1+1+2=4示......
  • 基于C语言用递归思想实现斐波那契数列的函数设计
    用C语言并利用递归思想实现设计一个程序,完成斐波那契数列的函数设计,利用递归实现!/********************************************************************* filename: * author :[email protected]* date :2024/04/07* function:利用递归思想实现设计......
  • 二十七 205. 斐波那契 (矩阵乘法|快速幂)
    205.斐波那契(矩阵乘法|快速幂)对矩阵和矩阵快速幂的讲解importjava.util.*;publicclassMain{privatestaticfinalintmod=10000;privatestaticint[][]mul(int[][]a,int[][]b){int[][]c={{0,0},{0,0}};for(inti......
  • Java斐波那契查找知识点(含面试大厂题和源码)
    斐波那契查找(FibonacciSearch)是一种在有序数组中查找元素的高效算法,它基于斐波那契数列的性质。斐波那契查找是二分查找的一种改进,通过使用斐波那契数列来确定搜索范围,可以在某些情况下减少比较次数,特别是在数组较大时表现更为出色。以下是斐波那契查找的一些关键知识点:......
  • 代码随想录算法训练营第38天|理论基础|509. 斐波那契数 |70. 爬楼梯 |746. 使用最小花
    代码随想录算法训练营第38天|理论基础|509.斐波那契数|70.爬楼梯|746.使用最小花费爬楼梯详细布置今天正式开始动态规划!理论基础无论大家之前对动态规划学到什么程度,一定要先看我讲的动态规划理论基础。如果没做过动态规划的题目,看我讲的理论基础,会有感觉是不......
  • c语言:用do-while输出前40项的斐波那契数值
    求Fibonacci数列的前40个元素。该数列的特点是第1、2两个数为1、1。从第3个数开始,每数是其前两个数之和。  分析:从题意可以用如下等式来表示斐波那契数列:     1,1,2,3,5,8,13,21…     f1=1     (n=1)     f2=1   ......
  • 以下是一个简单的C++程序,用于生成斐波那契数列的前n项
    斐波那契数列是一个在自然界中广泛出现的数列,其定义是:第一个和第二个数都是1,从第三个数开始,每一个数都是前两个数之和。斐波那契数列的前几项是:1,1,2,3,5,8,13,21,34,55,…以下是一个简单的C++程序,用于生成斐波那契数列的前n项:#include<iostream>#include<ve......
  • 【LeetCode 509 】斐波那契数
    题目描述原题链接:LeetCode.0509斐波那契数解题思路题目直接给出了公式,朴素解法可以直接用\(O(n)\)复杂度求出答案,可以看做是递归或动态规划的入门题;这里重点作为模板题来介绍矩阵快速幂技巧,讲一下\(O(log_2n)\)复杂度的解法:递推公式\(F(n)=F(n-1)+F(n-2)\),转换为矩......
  • 简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
    前言最近简单学了下Rust,以我这种菜鸟水平,没感受到什么安全、性能什么方面的优势,只觉得概念太多,编译各种报错。暂时也写不出来什么玩法,索性对比下各种学过的语言的性能。部分语言很早之前学过,很久不用就忘了,所以是用GPT写的。但运行逻辑很简单,所以应该没什么影响。具体的代码可以......
  • (斐波那契数列),假如兔子都不死,问到第12个月时一共有多少只兔子 //(有一对兔子,从出生后第
    //斐波那契数列,计算兔子的数量:11235813......从第三个数开始,//后一个数都是前两个数的和,假如兔子都不死,问到第12个月时一共有多少只兔子//(有一对兔子,从出生后第三个月开始,每一个月生一对兔子,小兔子同理)publicclassRabitDemo1{//斐波那契数列,计算兔子的数量:1......