[Luogu P3986] 斐波那契数列 (逆元)
题面
传送门:https://www.luogu.org/problemnew/show/P3986


Solution
这是一道很有意思的数论题。
首先,我们可以发现直接枚举a和b会T的起飞。
接下来,我们就可以观察一下式子了,我们略微手算一下,就会有这样的结果:

我们可以发现,a,b在每一项中的数量都可以用同一个斐波那契数列表示。
我们可以用g[x]表示斐波那契数列的第x项,那么,我们可以得到f[x]=a*g[x-1]+b*g[x]
接下来,由常识可以知道,斐波那契数列的第40项就差不多有10^9那么大了。
所以说,我们可以考虑枚举当前项x,问题就变为了有多少个a,b使得 K=a*g[x-1]+b*g[x]
移项得:b=(K-g[x-1]*a)/g[x]
因为a,b都是整数,问题就变为了有多少个a,使得K-g[x-1]*a能被g[x]整除
即:

对于斐波那契数列,有一个定理,就是f[x]与f[x-1]互质(证明略复杂,在这里就不给出了),这样就保证了同余方程有解。
同时,我们还有一个限制,就是 K-g[x-1]*a > 0 (因为b>0)即 a<K/g[x-1] 的
由这两个式子,我们就可以求出对于每一个x,有多少个a,b可以使得K=a*g[x-1]+b*g[x]
酱紫,我们就可以AC这道题(≧∀≦)♪
Code
#include<iostream>
#include<cstdio>
using namespace std;
const int N=45;
const int n=40+2;
const int poi=1000000007;
long long f[N],K,ans;
long long exgcd(long long A,long long B,long long &x,long long &y)
{
if(B==0)
{
x=1,y=0;
return A;
}
long long temp=exgcd(B,A%B,x,y),tx=x;
x=y,y=tx-(A/B)*y;
return temp;
}
long long inv(long long A,long long POI)
{
long long t,tt;
exgcd(A,POI,t,tt);
return (t%POI+POI)%POI;
}
int main()
{
scanf("%lld",&K); f[1]=f[2]=1;
for(int i=3;i<=n;i++)
f[i]=f[i-1]+f[i-2];
for(int i=2;i<=n;i++)
{
long long a=(K*inv(f[i-1],f[i]))%f[i],to=K/f[i-1]-1;
if(a<to)
{
if(a==0) ans--;
ans=(ans+1+(to-a)/f[i])%poi;
}
} printf("%lld",ans);
return 0;
}
[Luogu P3986] 斐波那契数列 (逆元)的更多相关文章
- Luogu 1962 斐波那契数列(矩阵,递推)
Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...
- P3986 斐波那契数列——数学(EXGCD)
https://www.luogu.org/problem/P3986 很久很久以前,我好像写过exgcd,但是我已经忘了: 洛谷上搜EXGCD搜不到,要搜(扩展欧几里得) 这道题就是ax+by=k, ...
- Luogu P1962 斐波那契数列(矩阵乘法模板)
传送门(其实就是求斐波那契数列....) 累了 明天再解释 做这道题需要一些关于矩阵乘法的基础知识. 1. 矩阵乘法的基础运算 只有当矩阵A的列数等于矩阵B的行数时,A与B可以相乘(A的行数不一定等于 ...
- P3986 斐波那契数列
题目描述 定义一个数列: f(0)=a,f(1)=b,f(n)=f(n−1)+f(n−2) 其中 a,b均为正整数,n≥2 . 问有多少种 (a,b),使得 k 出现在这个数列里,且不是前两项. 由于 ...
- [luogu P1962] 斐波那契数列(带快速幂矩阵乘法模板)
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...
- [LUOGU] P1962 斐波那契数列
求斐波那契第n项. [f(n-1) f(n)] * [0,1] = [f(n) f(n+1)] [1,1] 由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可. 快速幂本质和普通快速 ...
- 【luogu P1962 斐波那契数列】 题解
题目链接:https://www.luogu.org/problemnew/show/P1962 给你篇dalao的blog自己看吧,把矩阵快速幂的板子一改就OK #include <algor ...
- [Luogu] 广义斐波那契数列
https://www.luogu.org/problemnew/show/P1349 题解:https://www.zybuluo.com/wsndy-xx/note/1152988
- 矩阵乘法&&矩阵快速幂&&最基本的矩阵模型——斐波那契数列
矩阵,一个神奇又令人崩溃的东西,常常用来优化序列递推 在百度百科中,矩阵的定义: 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵.这一 ...
随机推荐
- k8s下的jenkins如何设置maven
关于k8s环境的jenkins集群 k8s下搭建了jenkins集群后,执行任务时会新建pod,任务完成后pod被销毁,架构如下图所示: 在k8s搭建jenkins集群的步骤请参照<> 关 ...
- 开源发丝分割数据集CelebAHairMask-HQ(国庆献礼)
在这个特别日子里,举国欢庆,什么都可以缺席,大礼包不行. 本次开源针对CelebAMask-HQ中发丝部分进行细化的数据集. 该数据集可用于发丝分割等方向的研究和探索. 在过去的一年时间里,疫情改变很 ...
- 微信小程序 LBS 能力全面解析
分享之前我们先来看看地图能力在小程序架构体现中所处的位置. 小程序架构图解 如图标黄处为地图能力所处的一个位置,举个例子,比如调用定位能力获取用户当前位置的一个流程: 首先调用 JS API wx.g ...
- 分享一些比较好用的(免费)网站及推荐理由 SMARK
分享一些比较好用的(免费)网站及推荐理由 --By SMARK 资源类 这里面是一些有供下载的资源的网站等 视频 片库 内容怎么样有待考证 蓝光网 看着还行, 打赏收入 预告片世界 还行, 收入有待考 ...
- IP基础知识
请根据IP地址 和 子网掩码,计算出 网络地址.广播地址 IP地址分类 对3类主要IP地址的补充说明:
- ThinkPHP 5 生命周期
前段时间用TP5开发了一个小程序,就熟悉了一下TP5.TP5是TP框架最新的一个版本,与以前的3还是有很大的区别,有人说和laravel比较靠近,其实也还好,每个人都有自己不同的看法,只要是选择一个自 ...
- 从远程库github.com克隆代码时遇到了如下的问题:
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hos ...
- 【5】进大厂必须掌握的面试题-Java面试-spring
spring面试问题 Q1.什么是spring? Spring本质上是一个轻量级的集成框架,可用于用Java开发企业应用程序. Q2.命名Spring框架的不同模块. 一些重要的Spring Fram ...
- ps 安装 ps 2017 下载 及教程(保姆式教程)
链接:https://pan.baidu.com/s/1GJHiwmxwRApFYhyNZBCQtQ 提取码:7r6u 以上是百度网盘的地址. 1.下载解压安装前先断网在安装点击set-up 软件,之 ...
- CSGO 服务端扩展插件开发记录之"DropClientReason"(1)
最近开始接触到了CSGO这款游戏,还是老套路,就是想千方百计的从里面增添新的游戏功能,当然刚开始想做到游刃有余是有点困难, 跟之前做CS1.6的第三方开发一样,都得自己慢慢的摸索过来,纵然CSGO所使 ...