题意就是用矩阵乘法来求斐波那契数列的第n项的后四位数。如果后四位全为0,则输出0,否则
输出后四位去掉前导0,也。。。就。。。是。。。说。。。输出Fn%10000。
题目说的如此清楚。。我居然还在%和/来找后四位还判断是不是全为0还输出时判断是否为0然后
去掉前导0。o(?□?)o
还有矩阵快速幂的幂是0时要特判。
P.S:今天下午就想好今天学一下矩阵乘法方面的知识,这题是我的第一道正式接触矩阵乘法的题,欧耶!
#include
#include
#include
#define maxn 5 using namespace std; const int mod = 10000; int n,q; struct Mat { int mp[maxn][maxn]; bool operator = (Mat a) { for(int i=0;i
mod) c.mp[i][j]-=mod; } } } return c; } Mat operator ^(Mat a,int k) { Mat c; for(int i=0;i
>=1; } return c; } int main() { while(scanf("%d",&q)!=EOF) { if(q == -1) break; Mat x; x.mp[0][0] = 0; x.mp[0][1] = 1; x.mp[1][0] = 1; x.mp[1][1] = 1; Mat y; y.mp[0][0] = 0; y.mp[1][0] = 1; Mat z; n = 2; if(!q) { printf("0\n"); continue; } z = x^(q-1); Mat tmp = z*y; printf("%d\n",tmp.mp[1][0]%10000); } return 0; }