zoukankan      html  css  js  c++  java
  • poj -3070 Fibonacci (矩阵快速幂)

    http://poj.org/problem?id=3070

    直接用矩阵快速幂得到f(n)

    然后输出后四位即可。

     1 #include <cstdio>
     2 typedef long long ll;
     3 const int mod = 10000;
     4 struct Mat
     5 {
     6     ll matrix[2][2];
     7 };
     8 
     9 Mat mul(Mat a,Mat b)
    10 {
    11     Mat c;
    12     for(int i=0;i<2;i++)
    13         for(int j=0;j<2;j++)
    14         {
    15             c.matrix[i][j]=0;
    16             for(int k=0;k<2;k++)
    17             {
    18                 c.matrix[i][j]+=(a.matrix[i][k]*b.matrix[k][j])%mod;
    19             }
    20             c.matrix[i][j]%=mod;
    21         }
    22     return c;
    23 }
    24 Mat mat;
    25 Mat solve(ll m)
    26 {
    27     Mat mt=mat;
    28     m--;
    29     while(m)
    30     {
    31         if(m&1)
    32         {
    33             mt=mul(mat,mt);
    34             m--;
    35         }
    36         mat=mul(mat,mat);
    37         m/=2;
    38     }
    39     return mt;
    40 }
    41 int main()
    42 {
    43     //freopen("a.txt","r",stdin);
    44     ll n;
    45     while(~scanf("%lld",&n)&&n!=-1)
    46     {
    47         if(n==0) {printf("0
    ");continue;}
    48         if(n==1) {printf("1
    ");continue;}
    49         mat.matrix[0][0]=mat.matrix[0][1]=mat.matrix[1][0]=1;
    50         mat.matrix[1][1]=0;
    51         Mat c=solve(n-1);
    52         printf("%lld
    ",c.matrix[0][0]%10000);
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    Web的攻击技术
    基于HTTP的功能追加协议
    确认访问用户身份的认证
    基本数据结构的模拟
    BFS与DFS
    KMP算法
    Trie字典树
    C++的结构体使用
    C++入门(命名空间)
    算法:C++入门
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4675401.html
Copyright © 2011-2022 走看看