• 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;
    }
  • 相关阅读:
    复利完结观看评价
    汉堡计划
    0406 复利计算完结篇
    构建之法 第四章 读后感
    复利计算单元测试
    实验一 cmd命令的编写
    构建之法 前三章读后感
    复利计算完成总结
    复利计算软件v3
    实验 0 了解和熟悉操作系统
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7198126.html
Copyright © 2020-2023  润新知