标签:
链接:点击打开链接
题意:求第n项的斐波那契数的后四位,不用填0
代码:
#include <iostream> #include <stdio.h> using namespace std; #define mod 10000 struct node{ long long m[2][2]; }; node P={0,1, 1,1}; node I={1,0, 0,1}; node mul(node a,node b){ long long i,j,k; node c; for(i=0;i<2;i++) for(j=0;j<2;j++){ c.m[i][j]=0; for(k=0;k<2;k++) c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; c.m[i][j]%=mod; } return c; } node quickmod(long long n){ node a,b; a=P;b=I; while(n){ if(n&1) b=mul(b,a); n>>=1; a=mul(a,a); } return b; } //矩阵快速幂求斐波那契的模板 int main(){ long long n,sum; node temp; while(scanf("%lld",&n)!=EOF){ if(n==-1) break; temp=quickmod(n); if(n==0){ printf("0\n"); continue; } sum=temp.m[0][1]%mod; printf("%lld\n",sum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/stay_accept/article/details/47666181