poj3070Fibonacci

来源:互联网 发布:网络课程怎么上 编辑:程序博客网 时间:2024/06/05 11:40

第一时间想到把n二进制拆分。

0ms通过的代码:

 #include<stdio.h>struct Matrix22{int d11;int d12;int d21;int d22;   Matrix22 operator =(Matrix22 a){d11=a.d11;d12=a.d12;d21=a.d21;d22=a.d22;}    Matrix22 operator *(Matrix22 b){Matrix22 c;c.d11=(d11*b.d11+d12*b.d21)%10000;c.d12=(d11*b.d12+d12*b.d22)%10000;c.d21=(d21*b.d11+d22*b.d21)%10000;c.d22=(d21*b.d12+d22*b.d22)%10000;return c;}}Matrix[32];int main(){freopen("input.txt","r",stdin);Matrix[0].d11=1;Matrix[0].d12=1;Matrix[0].d21=1;Matrix[0].d22=0;for(int i=1;i<32;i++){Matrix[i]=Matrix[i-1]*Matrix[i-1];}int n;while(scanf("%d",&n)&&n!=-1){Matrix22 output;output.d11=1;output.d12=0;output.d21=0;output.d22=1;int i=0;while(n>0){if(n&1){    output=output*Matrix[i];}i++;n=n>>1;}printf("%d\n",output.d12%10000);}}



原创粉丝点击