http://poj.org/problem?id=3070
矩阵的快速幂,二分
1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #define maxn 10000
5 using namespace std;
6 const int mod=10000;
7
8 int n;
9 struct node
10 {
11 int a[4][4];
12 };
13
14 node multi(node s,node t)
15 {
16 node c;
17 for(int i=0; i<2; i++)
18 {
19 for(int j=0; j<2; j++)
20 {
21 c.a[i][j]=0;
22 for(int k=0; k<2; k++)
23 {
24 c.a[i][j]=(c.a[i][j]+s.a[i][k]*t.a[k][j])%mod;
25 }
26 }
27 }
28 return c;
29 }
30
31
32 int main()
33 {
34 while(scanf("%d",&n)!=EOF)
35 {
36 if(n==-1) break;
37 node m,x;
38 m.a[0][0]=1; m.a[0][1]=0;
39 m.a[1][0]=0; m.a[1][1]=1;
40 x.a[0][0]=x.a[0][1]=x.a[1][0]=1;
41 x.a[1][1]=0;;
42 while(n)
43 {
44 if(n&1)
45 {
46 m=multi(m,x);
47 }
48 x=multi(x,x);
49 n>>=1;
50 }
51 printf("%d\n",m.a[0][1]);
52 }
53 return 0;
54 }
poj 3070 Fibonacci,布布扣,bubuko.com
时间: 2024-12-18 19:05:20