51Nod 1242 斐波那契数列的第N项(矩阵快速幂)

来源:互联网 发布:上海质检院待遇知乎 编辑:程序博客网 时间:2024/05/31 11:03

题目链接


大神博客

里面提到


最后一个式子展开


所有经过n-1次幂之后,直接输出第一个元素即可


矩阵快速幂和乘法快速幂大同小异

#include<iostream>#include<cstdio>#include<math.h>#include<cstring>#include<algorithm>#include<queue>#include<set>#include<vector>using namespace std;const int mod=1000000009;typedef struct node{long long m[2][2];}node;node cheng(node n1,node n2){node sum;for(int i=0;i<=1;i++){for(int j=0;j<=1;j++){sum.m[i][j]=0;for(int k=0;k<=1;k++){sum.m[i][j]+=n1.m[i][k]*n2.m[k][j];sum.m[i][j]%=mod;}}}return sum;}node f(node a,long long n){node sum=a;while(n){if(n&1)sum=cheng(sum,a);a=cheng(a,a);n>>=1;}return sum;}int main(){long long n;cin>>n;if(n==1) {cout<<1;return 0;}if(n==2){cout<<1;return 0;}node a={1,1,1,0};node no=f(a,n-2);cout<<no.m[0][0]%mod;return 0;}


阅读全文
1 0
原创粉丝点击