P3986 斐波那契数列——数学(EXGCD)
https://www.luogu.org/problem/P3986
很久很久以前,我好像写过exgcd,但是我已经忘了;
洛谷上搜EXGCD搜不到,要搜(扩展欧几里得)
这道题就是ax+by=k,其中ab为斐波那契数列里面相邻的两项;
a+b=k ;a+2b=k;2a+3b=k,3a+5b=k;
我们求解ax+by=k;
当x最小时,y最大,答案就是y/a向上取整;
因为y=(k-ax)/b;
{设此时的x为x0,则满足x=x0+tb,同理满足y=y0+ta,显然t+1就是此时的答案贡献,
那么用最大的y除以a向上取整即可(注意之所以要向上取整而不是t+1,
是因为避免y=0的情况,还有注意特判x0=0的情况)}(https://www.luogu.org/space/show?uid=24553)
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mo=1e9+;
ll f[],k;
ll x,y;
int cnt; void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=;y=;
return ;
}
exgcd(b,a%b,y,x);
y-=(a/b)*x;
} ll ans;
int main()
{
scanf("%lld",&k);
f[]=;f[]=;cnt=;
for(int i=;i<=;i++)
{
f[i]=f[i-]+f[i-];
if(f[i]>k) break;
++cnt;
}
for(int i=;i<=cnt;i++)
{
ll a=f[i-],b=f[i];
exgcd(a,b,x,y);
x*=k;//y*=k;
x=(x%b+b)%b;
if(x==) x=b;
y=(k-a*x)/b;
if(y<) continue;
ans=(ans+(y-)/a+)%mo;
}
printf("%lld",ans); return ;
}
P3986 斐波那契数列——数学(EXGCD)的更多相关文章
- [Luogu P3986] 斐波那契数列 (逆元)
题面 传送门:https://www.luogu.org/problemnew/show/P3986 Solution 这是一道很有意思的数论题. 首先,我们可以发现直接枚举a和b会T的起飞. 接下来 ...
- P3986 斐波那契数列
题目描述 定义一个数列: f(0)=a,f(1)=b,f(n)=f(n−1)+f(n−2) 其中 a,b均为正整数,n≥2 . 问有多少种 (a,b),使得 k 出现在这个数列里,且不是前两项. 由于 ...
- 【洛谷P1962 斐波那契数列】矩阵快速幂+数学推导
来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_ ...
- 《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- ACM2 斐波那契数列
描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1 ...
- 关于斐波拉契数列(Fibonacci)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现
最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...
- php实现斐波那契数列以及由此引起的联想
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...
- 九度OJ题目1387斐波那契数列
/*斐波那契数列,又称黄金分割数列,指的是这样一个数列: 0.1.1.2.3.5.8.13.21.…… 在数学上,斐波纳契数列被定义如下: F0=0,F1=1, Fn=F(n-1)+F(n-2)(n& ...
随机推荐
- sqlserver 查看表死锁
1.SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tr ...
- YIii2.0-学习笔记之服务器安装
最近项目需要,学习了一下yii2.0框架 第一步: 安装composer--------作为一个phper composer不会用可能有点不合适 下载composer.phar文件 #curl - ...
- C/C++ cmake example
学习 Golang,有时需要 Cgo,所以需要学习 C.C++. 语言入门: https://item.jd.com/12580612.html https://item.jd.com/2832653 ...
- RabbitMQ 应用一
(百度百科)MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的 ...
- 转 winfrom组件圆角
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Mybatis之日志工厂
思考:我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率? 如果一个 数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查问题. 对于以往的开发过程, ...
- python3 访问 rabbitmq 示例
关于 rabbitmq 之前用过 kafka,要是拿这两者做对比的话,大概有以下异同: 两者都是一个分布式架构 kafka 具有较高的吞吐量,rabbimq 吞吐量较小 rabbitmq 的可靠性更好 ...
- 如果只有1小时学Python,看这篇就够了
大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...
- Session机制详解及分布式中Session共享解决方案
一.为什么要产生Session http协议本身是无状态的,客户端只需要向服务器请求下载内容,客户端和服务器都不记录彼此的历史信息,每一次请求都是独立的. 为什么是无状态的呢?因为浏览器与服务器是使用 ...
- javascript之ECMAScript:语法的操作标准
一.如何书写一个javascript代码 javascript代码需要写在javascript标签中才会生效,而javascript标签可以写在任何地方,但考虑到规范化及页面的加载问题,最好是写在bo ...