首页 > 代码库 > AC日记——斐波那契数列 洛谷 P1962
AC日记——斐波那契数列 洛谷 P1962
斐波那契数列
思路:
矩阵快速幂;
来,上代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define mod 1000000007struct MatrixType { long long ai[3][3]; void mem() { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) ai[i][j]=0; } }};long long n;MatrixType mul(MatrixType a,MatrixType b){ MatrixType res; res.mem(); for(int i=1;i<=2;i++) { for(int j=1;j<=2;j++) { for(int v=1;v<=2;v++) res.ai[i][j]=(res.ai[i][j]+(a.ai[i][v]*b.ai[v][j])%mod)%mod; } } return res;}long long poww(long long mi){ MatrixType pos,mii; pos.mem(),mii.mem(); pos.ai[1][1]=1,pos.ai[1][2]=0; pos.ai[2][1]=0,pos.ai[2][2]=0; mii.ai[1][1]=1,mii.ai[1][2]=1; mii.ai[2][1]=1,mii.ai[2][2]=0; while(mi>0) { if(mi&1) pos=mul(pos,mii); mi=mi>>1,mii=mul(mii,mii); } return pos.ai[1][1];}int main(){ scanf("%lld",&n); cout<<poww(--n)%mod; return 0;}
AC日记——斐波那契数列 洛谷 P1962
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。