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

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

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int mod=10000;
    struct matrix
    {
        int m[2][2];
    }ans,base;//这里用一个结构体数组不知道省了多少代码
    
    //base数组记入的是矩阵的2^x次幂 
    
    matrix multi(matrix a,matrix b)//返回的是结构体里的东西我们就要用 结构体来写类型 
    {
        matrix tem;//临时写的关于结构体的一个数组 用作中间过渡用 
        for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
        {
            tem.m[i][j]=0;// 初始化 
            for(int k=0;k<2;k++)
            {
                tem.m[i][j]=(tem.m[i][j]+a.m[i][k]*b.m[k][j])%mod;//把你算的东西存入tem里 
            }
        }
        return tem;//返回的就是你这一次作乘法的结果 
    }
    
    int fast_mod(int n)
    {
        base.m[0][0]=base.m[0][1]=base.m[1][0]=1;//题目里写的矩阵 
        base.m[1][1]=0;
        ans.m[0][0]=ans.m[1][1]=1;//这个是一个单位矩阵 
        ans.m[1][0]=ans.m[0][1]=0;
        while(n)
        {
            if(n&1)//表示n为奇数的情况 
            {
                ans=multi(ans,base);
            }
            base=multi(base,base);
            n>>=1;//每次除2 
            
        }
        return ans.m[0][1];
    }
    int main()
    {
        long long n;
        while(scanf("%lld",&n)!=EOF&&n!=-1)
        {
            printf("%d
    ",fast_mod(n));
        }
        return 0;
        
     } 
  • 相关阅读:
    崔工读过的技术书籍,持续更新中!
    Python-S9——Day110-Git继续
    Python-S9——Day115-Flask Web框架
    树形dp 之 小胖守皇宫
    线性dp 之 奶牛渡河
    网课神器之obs-studio的安装使用
    Convert to Ones
    UVA 10653.Prince and Princess
    HDOJ 1051. Wooden Sticks
    洛谷P1063.能量项链
  • 原文地址:https://www.cnblogs.com/2000liuwei/p/10851734.html
Copyright © 2011-2022 走看看