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

P3986 斐波那契数列

时间:2023-05-15 19:47:36浏览次数:34  
标签:ch int ll P3986 斐波 getchar 那契 include define

傻逼题。

首先,\(Fib_{47}=2.971215073\times10^9\)。

所以说我们把这个系数整出来,然后一个一个验就可以了。

这里用 Ex-gcd 就可以了,找到通解,然后算出正整数解的个数就可以了。

//#pragma GCC optimize(2)
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <bitset>
#include <stack>
#include <tuple>
#define ll long long
#define fp(a,b,c) for(ll a=b;a<=c;a++)
#define fd(a,b,c) for(ll a=b;a>=c;a--)
#define pii pair<int,int>
#define pll pair<ll,ll>
#define inf 0x3f3f3f3f
#define int ll
#define base 127
#define mod 1000000007
#define cel(a,b) (a%b)?(a/b+1):a/b 

using namespace std;

inline int rd(){
	int x = 0, f = 1;char ch = getchar();
	while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}
	while(ch >= '0' && ch <= '9')x = (x<<1) + (x<<3) + (ch^48),ch = getchar();
	return x * f;}
inline ll lrd(){
	ll x = 0, f = 1;char ch = getchar();
	while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}
	while(ch >= '0' && ch <= '9')x = (x<<1) + (x<<3) + (ch^48),ch = getchar();
	return x * f;}

int exgcd(int &x,int &y,int a,int b){
	if(!b){
		x=1,y=0;return a;
	}
	int sum=exgcd(x,y,b,a%b);
	int t=x;
	x=y;
	y=t-a/b*y;
	return sum;
}

int k;
pii xs[100];

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0); 
	k=rd();
	xs[1]={1,0};
	xs[2]={0,1};
	fp(i,3,47){
		xs[i].first=xs[i-1].first+xs[i-2].first;
		xs[i].second=xs[i-1].second+xs[i-2].second;
	}
	ll ans=0;
	fp(i,3,47){
		int x,y;
		int gd=exgcd(x,y,xs[i].first,xs[i].second);
		int a=xs[i].first,b=xs[i].second;
		if(k%gd!=0) continue ;
		x*=(k/gd),y*=(k/gd);
		x=(x%b+b)%b;
		if(x==0)
			x=b;
		y=(k-(a*x))/b;
		if(y<0) continue ;
		(ans+=cel(y,a))%=mod;
	}
	cout << ans << endl;
	return 0;
} 

标签:ch,int,ll,P3986,斐波,getchar,那契,include,define
From: https://www.cnblogs.com/Benzenesir/p/17402861.html

相关文章

  • 输出 截止 大于500的斐波那锲数
    classFibs:def__init__(self):self.a=0self.b=1def__next__(self):self.a,self.b=self.b,self.a+self.breturnself.adef__iter__(self):returnselffibs=Fibs()forfinfibs:iff......
  • 菲波那契数列
     【题目描述】菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数是多少。【输入】第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1<=a<=20)。【输出......
  • 斐波那契数列
    斐波那契数列性质定义:\[f_i=\begin{cases}[i=1]&,i\le1\\f_{i-1}+f_{i-2}&,i\ge2\end{cases}\]通项:\[f_n=\frac{\left(\frac{1+\sqrt5}{2}\right)^n-\left(\frac{1-\sqrt5}{2}\right)^n}{\sqrt5}\]性质:\[\sum_{i=1}^nf_i=f_{n+2}-1\]数学归纳法易证......
  • 动态规划:剑指 Offer 10- I. 斐波那契数列
    题目描述: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0)=0,F(1)=1F(N)=F(N-1)+F(N-2),其中N>1.斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模1e9+7(10000......
  • 51nod 1242 斐波那契数列的第N项(矩阵快速幂)
    1242 斐波那契数列的第N项基准时间限制:1 秒空间限制:131072 KB分值: 0 难度:基础题 收藏 关注斐波那契数列的定义如下:F(0)=0F(1)=1F(n)=F(n-1)+F(n-2)(n>=2)(1,1,2......
  • 使用数学归纳法证明斐波那契数列通项公式
    使用数学归纳法证明斐波那契数列通项公式:\(F_{n}=\dfrac{\phi^{n}-\hat{\phi}^{n}}{\sqrt{5}}\)定义已知斐波那契数列\(F\)定义为:\[F_{n}=\begin{cases}0,n=0\\n,n=1\\F_{n-1}+F_{n-2},i\ge2\end{cases}\]\(\phi\)和......
  • 斐波那契数列第n项
    importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); intn=sc.nextInt(); inta=1,b=1,i=1; while(i<n){ intc=a+b; a=b; ......
  • Python 斐波那契数列
    概念:斐波那契数列又称黄金分割数列,即:1,1,2,3,5,8,13,21,…,这个数列前两项都是1,从第3项开始,每一项都等于前两项之和。随着数列的增加,前一项与后一项的比值逼近0.6180339887这个黄金分割系数 code:deffiblist(input):fib=[1,1]#第一和第二项固定为值为1......
  • 代码随想录Day38-Leetcode509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
    咳咳,因为找实习+摆导致时间被浪费大半;先从动态规划学起吧,之前的慢慢补。理论基础动态规划的解题步骤1.确定dp数组及对应下标的含义2.确定dp的状态转移方程(递推公式)3.确定dp数组如何初始化4.确定dp遍历顺序5.距离推导dp数组验证509.斐波那契数题目链接:https://le......
  • 剑指 Offer 10- I. 斐波那契数列
     分析:偷个懒,上次做的一样的题代码:1classSolution(object):2deffib(self,n):3"""4:typen:int5:rtype:int6"""7ifn<2:8returnn9f=[0foriinra......