zoukankan      html  css  js  c++  java
  • POJ 3070 + 51Nod 1242 大斐波那契数取余

     POJ 3070

    #include "iostream"
    #include "cstdio"
    using namespace std;
    
    class matrix
    {
    public:
        int a[2][2];
        matrix()
        {
            a[0][0]=a[1][0]=a[0][1]=1;
            a[1][1]=0;
        }
    };
    
    matrix multi(matrix a,matrix b)
    {
        matrix temp;
        int i,j,k;
        for(i=0;i<2;i++)
            for(j=0;j<2;j++)
            {
                temp.a[i][j]=0;
                for(k=0;k<2;k++)
                    temp.a[i][j]+=(a.a[i][k]*b.a[k][j]);
                temp.a[i][j]%=10000;
            }
            return temp;
    }
    
    
    matrix power(int n)
    {
         matrix temp,s;
            temp.a[0][1]=temp.a[1][0]=0;
            temp.a[0][0]=temp.a[1][1]=1;
            while(n!=0)
            {
              if(n%2!=0)
                temp=multi(temp,s);
            s=multi(s,s);
            n=n/2;
            }
            return temp;
    }
    
    int main()
    {
        int n;
        while(~scanf("%d",&n)&&(n!=-1))
        {
    
            matrix t=power(n);
            cout<<t.a[1][0]<<endl;
        }
        return 0;
    }

     51Nod 1242 大斐波那契数取余

    #include "iostream"
    #include "cstdio"
    using namespace std;
    #define MOD 1000000009
    #define LL long long
    class matrix
    {
    public:
        LL a[2][2];
        matrix()
        {
            a[0][0]=a[1][0]=a[0][1]=1;
            a[1][1]=0;
        }
    };
    
    matrix multi(matrix a,matrix b)
    {
        matrix temp;
        LL i,j,k;
        for(i=0;i<2;i++)
            for(j=0;j<2;j++)
            {
                temp.a[i][j]=0;
                for(k=0;k<2;k++)
                    temp.a[i][j]+=(a.a[i][k]*b.a[k][j]);
                temp.a[i][j]%=MOD;
            }
            return temp;
    }
    
    
    matrix power(LL n)
    {
         matrix temp,s;
            temp.a[0][1]=temp.a[1][0]=0;
            temp.a[0][0]=temp.a[1][1]=1;
            while(n!=0)
            {
              if(n%2!=0)
                temp=multi(temp,s);
            s=multi(s,s);
            n=n/2;
            }
            return temp;
    }
    
    int main()
    {
        LL n;
        while(~scanf("%lld",&n)&&(n!=-1))
        {
    
            matrix t=power(n);
            cout<<t.a[1][0]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    POJ2516 构图+k次费用流
    POJ 1511 最短路径之和(spfa或dijkstra+heap)
    windows中配置mongodb
    原型设计
    Erlang的参考资源
    用Erlang实现递归查找文件
    list相关的习题
    springmvc基础知识
    汇编实验4
    实验3 转移指令跳转原理及其简单应用编程
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7198126.html
Copyright © 2011-2022 走看看