51Nod 1358 浮波那契 (矩阵快速幂 构造矩阵)
2017-10-10 18:12
501 查看
1358 浮波那契
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
TengBieBie已经学习了很多关于斐波那切数列的性质,所以他感到一些些厌烦。现在他遇到了一个新的数列,这个数列叫做Float-Bonacci。这里有一个关于Float-Bonacci的定义。
对于一个具体的n,TengBieBie想要快速计算FB(n).
但是TengBieBie对FB的了解非常少,所以他向你求助。
你的任务是计算FB(n).FB(n)可能非常大,请输出FB(n)%1,000,000,007 (1e9+7)即可。
Input
Output
Input示例
Output示例
乘10,将递推式变为整数项,f(n)=f(n-10)+f(n-34)
构造34*34的矩阵
s.a[1][10]=s.a[1][34]=1;
for(i=2;i<=34;i++)
s.a[i][i-1]=1;
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
TengBieBie已经学习了很多关于斐波那切数列的性质,所以他感到一些些厌烦。现在他遇到了一个新的数列,这个数列叫做Float-Bonacci。这里有一个关于Float-Bonacci的定义。
对于一个具体的n,TengBieBie想要快速计算FB(n).
但是TengBieBie对FB的了解非常少,所以他向你求助。
你的任务是计算FB(n).FB(n)可能非常大,请输出FB(n)%1,000,000,007 (1e9+7)即可。
Input
输入共一行,在一行中给出一个整数n (1<=n<=1,000,000,000)。
Output
对于每一个n,在一行中输出FB(n)%1,000,000,007 (1e9+7)。
Input示例
5
Output示例
2
乘10,将递推式变为整数项,f(n)=f(n-10)+f(n-34)
构造34*34的矩阵
s.a[1][10]=s.a[1][34]=1;
for(i=2;i<=34;i++)
s.a[i][i-1]=1;
#include <stdio.h> #include <iostream> #include <string.h> #include <string> #include <algorithm> #include <math.h> #include <set> typedef long long ll; #define mod 1000000007 using namespace std; struct matrix { ll a[40][40]; }; matrix multi(matrix x,matrix y) { matrix m; memset(m.a,0,sizeof(m.a)); int i,j,k; for(i=1;i<=34;i++) { for(j=1;j<=34;j++) { for(k=1;k<=34;k++) { m.a[i][j]+=x.a[i][k]*y.a[k][j]; m.a[i][j]%=mod; } } } return m; } matrix q_pow(matrix x,ll n) { int i; matrix r; memset(r.a,0,sizeof(r.a)); for(i=1;i<=34;i++) { r.a[i][i]=1; } while(n) { if(n&1) r=multi(r,x); x=multi(x,x); n>>=1; } return r; } int main () { ll i,n,b; matrix s; memset(s.a,0,sizeof(s.a)); scanf("%lld",&n); if(n<=4) printf("1\n"); else { b=(n-4)*10; s.a[1][10]=s.a[1][34]=1; for(i=2;i<=34;i++) s.a[i][i-1]=1; matrix r; r=q_pow(s,b); ll ans=0; for(i=1;i<=34;i++) { ans+=r.a[1][i]; ans%=mod; } printf("%lld\n",ans); } return 0; }
相关文章推荐
- 51Nod 1358 浮波那契 (矩阵快速幂)
- 51NOD 1358 浮波那契 【矩阵快速幂】
- 51nod 1358 浮波那契【思维+矩阵快速幂】好题!
- 51nod-1358-浮波那契(构造矩阵)
- 51NOD - 1358 - 浮波那契【变形的矩阵快速幂】
- CodeForces 185A. Plant(矩阵快速幂) 构造
- 51nod 1537 分解(矩阵快速幂)
- 【51Nod 1142】棋子遍历棋盘 矩阵快速幂+插头DP
- hdu4565 矩阵构造+矩阵快速幂
- 【51nod 1126】求递推序列的第N项 【矩阵快速幂】or【枚举找循环节】
- [矩阵快速幂 优化DP] 51Nod 1311 转换机
- poj 3735 Training little cats(矩阵构造,快速幂)
- Codeforces621E 矩阵构造快速幂
- 51nod-1358:浮波那契
- hdu A Simple Math Problem 1757 矩阵的构造和快速幂
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- [矩阵快速幂 优化DP] 51Nod 1311 转换机
- hdu 1005 Number Sequence 构造矩阵 + 矩阵快速幂
- 51nod 1033 骨牌覆盖 V2(矩阵快速幂)
- 51nod 1341(推公式、矩阵快速幂)