• 51nod1126【矩阵快速幂】


    思路:
    中间矩阵等于结果矩阵。
    很简单的一题。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N=1e2+10;
    const int mod=7;
    
    struct asd{
        int num[3][3];
    };
    
    
    asd mul(asd a,asd b)
    {
        asd ans;
        memset(ans.num,0,sizeof(ans.num));
        for(int i=0;i<2;i++)
            for(int j=0;j<2;j++)
                for(int k=0;k<2;k++)
                    ans.num[i][j]=(ans.num[i][j]+a.num[i][k]*b.num[k][j])%mod;
        return ans;
    }
    asd quickmul(int g,asd x)
    {
        asd ans;
        for(int i=0;i<2;i++)
            for(int j=0;j<2;j++)
            {
                if(i==j)
                    ans.num[i][j]=1;
                else
                    ans.num[i][j]=0;
            }
        while(g)
        {
            if(g%2) ans=mul(ans,x);
            x=mul(x,x);
            g>>=1;
        }
        return ans;
    }
    int main()
    {
        int c,a,b,n;
        asd x,ans;
        scanf("%d%d%d",&a,&b,&n);
        if(n==1||n==2)
        {
            puts("1");
            return 0;
        }
        x.num[0][0]=a;x.num[0][1]=b;
        x.num[1][0]=1;x.num[1][1]=0;
        ans=quickmul(n-2,x);
        c=ans.num[0][0]+ans.num[0][1];
        while(c<0)
            c+=mod;
        printf("%d
    ",c%mod);
        return 0;
    }
    
  • 相关阅读:
    HDU4611+数学
    HDU4612+Tarjan缩点+BFS求树的直径
    HDU4602+推导公式
    HDU4607+BFS
    HDU1353+贪心
    HDU4545+LCS
    HDU4548+素数
    HDU4539+状态压缩DP
    HDU2110+母函数
    HDU1569+最大点权集
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934824.html
Copyright © 2020-2023  润新知