zoukankan      html  css  js  c++  java
  • HDU 1005 矩阵的快速二分幂

    题目描述: 如何求取f(n),类似于斐波那契数列,用矩阵的快速二分幂原理进行

    算法代码

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    typedef struct m
    {
        int a[2][2];
    }Mat;
    typedef struct o
    {
        int sno; //器官序号
        int day; 
    }Cat;
    Cat cat[N]; //
    const int N=10001;
    const __int64 INF = 10e18;
    
    Mat E;//unit matrix;
    void InitE(Mat& e)
    {
        e.a[0][0]=1;
        e.a[0][1]=0;
        e.a[1][0]=0;
        e.a[1][1]=1;
    }
    Mat MatMul(Mat x,Mat y)
    {
        int i,j,k;
        Mat c;
        for(i=0;i<2;++i)
            for(j=0;j<2;++j)
            {
                c.a[i][j]=0;
                for(k=0;k<2;++k)
                {
                    c.a[i][j]+=x.a[i][k] * y.a[k][j];                                
                }
                c.a[i][j] %=7;
            }
        return c;
    }
    Mat MatPow(Mat d,int n) //matrix binary divide,calculate n power of matrix a
    {
        Mat t=E;
        
        while(n>0)
        {
            if(n&1)
                t=MatMul(t,d);
            d = MatMul(d,d);
            n>>=1;
        }
        return t;
    }
    int main()
    {
        int p,q,n;
        while(cin>>p>>q>>n && p|q|n)
        {
            if(!n)
                cout<<q<<endl;
            else if(n<3)
                cout<<p<<endl;
            else
            {
                InitE(E); //init unit matrix
                Mat m;
                m.a[0][0] = p;
                m.a[0][1] = q;
                m.a[1][0] = 1;
                m.a[1][1] = 0;
                m = MatPow(m,n-2);
                cout<<(m.a[0][0]+m.a[0][1])%7<<endl;
            }
            
        }
        return 0;
    }
    作者:ballwql
    本文为作者原创,版权所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    使用lambda的精简写法
    lambda实现集合遍历 排序
    stream流 list转map
    stream.min
    lambda实现线程调用
    stream.allMatch
    stream.reduce
    stream流 of
    Stream流 list转set
    SQL Server 游标的简单介绍 转载
  • 原文地址:https://www.cnblogs.com/ballwql/p/2981497.html
Copyright © 2011-2022 走看看