题面

传送门: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;
}

最新文章

  1. CGContextRef 画线简单用法
  2. Swift2.1 语法指南——扩展
  3. Xcode + Swift 制作动态原型
  4. RMAN备份与恢复之参数文件与控制文件
  5. python学习第四天第一部分
  6. 基于Dubbo框架构建分布式服务
  7. 第6章 Overlapped I/O, 在你身后变戏法 ---被激发的 Event 对象 -4
  8. 前端之 HTML&#127875;
  9. 复杂链表的复制(Hard)
  10. Centos7快速部署CloudStack服务器
  11. DAO(Repository),Service,Controller层之间的相互关系
  12. DOSBOX的安装和使用(window10 64位)
  13. Web Workers 简介
  14. Baidu WebUploader 前端文件上传组件的使用
  15. 23. 合并K个排序链表
  16. Selenium+Headless Firefox
  17. python实现图的遍历(递归和非递归)
  18. 基于FPGA(DDS)的正弦波发生器
  19. 五年屌丝运维工作shell精华
  20. vim常忘命令

热门文章

  1. MySQL 5.7 InnoDB锁
  2. (转载)CPU基础知识
  3. 不知如何创建UML电路图?看看本文
  4. rxjs入门3之项目中ajax函数封装
  5. macvlan几种模式
  6. cmake引入三方库
  7. C语言/C++编程学习:送给考计算机二级的同学:公共基础知识总结!
  8. 用cgroup限制内存以防止Linux因内存用尽卡死
  9. PHP 超级全局变量 $_GET
  10. SQL报表语句;SQL获取今日、本周、本月数据