P3986 斐波那契数列——数学(EXGCD)
时间:2019-09-25
本文章向大家介绍P3986 斐波那契数列——数学(EXGCD),主要包括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+7; ll f[2000],k; ll x,y; int cnt; void exgcd(ll a,ll b,ll &x,ll &y) { if(!b) { x=1;y=0; return ; } exgcd(b,a%b,y,x); y-=(a/b)*x; } ll ans; int main() { scanf("%lld",&k); f[0]=1;f[1]=1;cnt=2; for(int i=2;i<=100;i++) { f[i]=f[i-1]+f[i-2]; if(f[i]>k) break; ++cnt; } for(int i=1;i<=cnt;i++) { ll a=f[i-1],b=f[i]; exgcd(a,b,x,y); x*=k;//y*=k; x=(x%b+b)%b; if(x==0) x=b; y=(k-a*x)/b; if(y<0) continue; ans=(ans+(y-1)/a+1)%mo; } printf("%lld",ans); return 0; }
原文地址:https://www.cnblogs.com/WHFF521/p/11587417.html
- NBitcoin:密码学第2部分
- gh-ost:在线DDL修改MySQL表结构工具
- poj-----(2828)Buy Tickets(线段树单点更新)
- javaSE之线程联合
- ASM 翻译系列第三十一弹:了解ASM文件的空间分配
- 备份重于一切:远离“Gitlab删库事件”,QBackup是你的最佳选择!
- FFMPEG指令
- Gitlab删库事件回顾,备份手段还停留在“原始社会”?
- ASM 翻译系列第三十二弹:自制数据抽取小工具
- WordPress集成SendCloud邮件代发,规避SMTP泄漏网站主机真实IP的风险
- ASM 翻译系列第三十三弹:REQUIRED_MIRROR_FREE_MB的含义
- 放弃Python转向Go语言:这9大理由就够了 !(附代码)
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
- 利用HSTS安全协议柔性解决全站HTTPS的兼容性问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法