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 ;
}

最新文章

  1. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
  2. hdu 3579 Hello Kiki (中国剩余定理)
  3. 类库LinqToExcel的介绍
  4. 工厂模式 - 程序实现(java)
  5. Drupal7安装完整教程
  6. HDU 1498 50 years, 50 colors(最小点覆盖,坑称号)
  7. ReIn
  8. Obj-C 实现 QFileDialog函数
  9. 关于 linux中TCP数据包(SKB)序列号的小笔记
  10. 20165305 《网络对抗技术》 Kali安装
  11. Postman的Tests标签测试
  12. scrapy:get cookie from response
  13. Redis集群事物提交异常Multi-key operations must involve a single slot
  14. centos 6.x系统升级glibc库至2.15版本的快速解决办法
  15. Oracle性能优化3-sql优化一定要等价
  16. Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式
  17. Linux C语言连接 sqlserver数据库
  18. e868. 获取和设置本地外观
  19. linux普通用户获取管理员权限
  20. Java容器深入浅出之List、ListIterator和ArrayList

热门文章

  1. collections.defaultdict()的使用
  2. VS.NET(C#)--2.8HTML服务器控件
  3. JAVA操作ORACLE大对象
  4. Java 之 字符输入流[Reader]
  5. View Controller Programming Guid for iOS 笔记
  6. 7层网络以及5种Linux IO模型以及相应IO基础
  7. djangoNotes
  8. MVC-Cache-1.输出缓存(Cache:[1].输出缓存2.应用程序缓存)
  9. 算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了
  10. 最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现