luogu 11月月赛 斐波那契数列
2017-12-01 19:36
225 查看
本来想作为水题刷,很快就想出了做法,结果细节实现太差改了好久。。。
根据题意你会发现其实就是求方程 ax+by=k解的个数。
此时 a=f[i],b=f[i+1],而(x,y)就是你要求的数对。
于是你就对斐波那契的每一项进行扩展欧几里得,然后计算个数,注意向上取整!!!
此时你把y转换为最大值应该是一个y≡n+a*t 而a可以为0,所以要加一。
#include<bits/stdc++.h> using namespace std; long long f[100]; void exgcd(long long a,long long b,long long &x,long long &y) { if(b==0) { x=1;y=0;return; } exgcd(b,a%b,x,y); long long tmp=x;x=y;y=tmp-a/b*y; } const int mod=1e9+7; int main() { long long k; scanf("%lld",&k); f[0]=0;f[1]=1; for(int i=2;i<=46;++i) { f[i]=f[i-1]+f[i-2]; } long long ans=0; for(int i=1;i<=45;++i) { long long x,y,tmp=0; exgcd(f[i],f[i+1],x,y); x=x*k;y=y*k; x=(x%f[i+1]+f[i+1])%f[i+1]; if(x==0)x=f[i+1]; y=(k-f[i]*x)/f[i+1]; if(y<0)continue; ans=(ans+(y-1)/f[i]+1)%mod; } printf("%lld",ans); return 0;
}
相关文章推荐
- 洛谷11月月赛 T3 斐波那契数列
- 洛谷11月月赛round.2
- 武汉科技大学计算机学院11月月赛:Hunters
- 武汉科技大学计算机学院11月月赛:The Little Girl who Picks Mushrooms
- NOIP模拟赛(洛谷11月月赛)
- [codeplus 11月月赛]T1 jogging
- 武汉科技大学计算机学院11月月赛:WHUgirls
- 洛咕11月月赛部分题解 By cellur925
- 【FOJ2205 11月月赛A】【二分图结论题】据说题目很水 n个点上不形成三元环的最大边数
- 洛谷11月月赛总结
- 【luogu10月月赛】一道中档题 Factorial(数论)
- [codeplus 11月月赛]T2 timber
- 武汉科技大学计算机学院11月月赛:A+B
- 【FOJ2206 11月月赛B】【观察找规律】函数求解 分析函数求值
- FOJ 11月月赛题解
- 洛谷11月月赛 T1 高兴的津津
- 【FOJ2210 11月月赛F】【DFS or 拓扑排序】攻占计划 n个点m条边DAG破坏一个点使得不可达点数尽可能多
- 洛谷11月月赛round.1
- 洛谷11月月赛 T2 不开心的金明
- fzoj11月有奖月赛ytaaa