[日常训练]斐波那契数
Description
设f(0)=0,f(1)=1,f(i)=f(i−1)+f(i−2)(i≥2),求f(f(n))mod109+7。
Input
第一行一个数表示数据组数t。
接下来t行,每行包含一个正整数n。
Output
输出共t行,每行一个整数表示答案。
Sample Input
3
3
20
30
Sample Output
1
365706550
899899483
HINT
1≤n≤10100,0<t≤104.
Solution
f(x)≡f(xmod2×109+16)(mod109+7)
f(x)≡f(xmod329616)(mod2×109+16)
所以只需要先将输入mod329616求一次f(),然后mod2×109+16求一次f()即可。
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 2
#define M1 329616ll
#define M2 2000000016ll
#define M3 1000000007ll
using namespace std;
typedef long long ll;
struct matrix{
ll a[N][N];int n,m;
}a,b,c;
ll n;int t;
inline ll read(){
ll ret=0ll;char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c)){
ret=((ret<<1ll)+(ret<<3ll)+c-'0')%M1;
c=getchar();
}
return ret;
}
inline matrix mul(matrix a,matrix b,ll p){
matrix ret;
ret.n=a.n;ret.m=b.m;
for(int i=0;i<ret.n;++i)
for(int j=0;j<ret.m;++j){
ret.a[i][j]=0ll;
for(int k=0;k<ret.n;++k)
ret.a[i][j]=(ret.a[i][j]+a.a[i][k]*b.a[k][j]%p)%p;
}
return ret;
}
inline matrix po(matrix a,ll k,ll p){
matrix ret;
ret.n=ret.m=a.n;
for(int i=0;i<ret.n;++i)
for(int j=0;j<ret.m;++j)
if(i!=j) ret.a[i][j]=0ll;
else ret.a[i][j]=1ll;
while(k){
if(k&1ll) ret=mul(ret,a,p);
a=mul(a,a,p);k>>=1ll;
}
return ret;
}
inline void Aireen(){
a.n=2;a.m=1;a.a[0][0]=1ll;
b.n=b.m=2;b.a[0][0]=b.a[0][1]=b.a[1][0]=1ll;
scanf("%d",&t);
while(t--){
n=read();
if(n<=1){
printf("%lld\n",n);continue;
}
c=mul(po(b,n-1ll,M2),a,M2);
if(c.a[0][0]<=1){
printf("%lld\n",c.a[0][0]);continue;
}
c=mul(po(b,c.a[0][0]-1ll,M3),a,M3);
printf("%lld\n",c.a[0][0]);
}
}
int main(){
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
Aireen();
fclose(stdin);
fclose(stdout);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用