zoukankan      html  css  js  c++  java
  • 【CODEVS】1281 Xn数列

    【算法】矩阵快速幂

    【题解】T*A(n-1)=A(n)矩阵如下:

    a 1 * x(n-1) 0 = xn 0

    0 1    c        0    c   0

    防止溢出可以用类似快速幂的快速乘。

    #include<cstdio>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll MOD,A,c,x0,n,g,a[2][2],b[2][2],t[2][2];
    ll mull(ll x,ll y)
    {
        ll ans=0;
        while(y>0)
         {
             if(y&1)ans=(ans+x)%MOD;
             x=(x<<1)%MOD;//x+x
            y>>=1; 
         }
        return ans;
    }
    void mul(ll a[2][2],ll b[2][2],ll ans[2][2])
    {
        for(int i=0;i<2;i++)
         for(int j=0;j<2;j++)
          {
              t[i][j]=0;
              for(int k=0;k<2;k++)
               t[i][j]=(t[i][j]+mull(a[i][k],b[k][j]))%MOD;
          }
        for(int i=0;i<2;i++)
         for(int j=0;j<2;j++)
          ans[i][j]=t[i][j];
    }
    int main()
    {
        scanf("%lld%lld%lld%lld%lld%lld",&MOD,&A,&c,&x0,&n,&g);
        a[0][0]=A,a[0][1]=a[1][1]=1,a[1][0]=0;
        b[0][0]=x0,b[1][0]=c,b[0][1]=b[1][1]=0;
        while(n>0)
         {
             if(n&1)mul(a,b,b);
             n>>=1;
             mul(a,a,a);
         }
        printf("%lld",b[0][0]%g);
        return 0;
    }
    View Code
  • 相关阅读:
    UVA 558 Wormholes
    HDU 1565 方格取数(1)
    poj2607
    poj2552
    poj2491
    poj2502
    poj2613
    .NET Framework 4 与 .NET Framework 4 Client Profile的区别与联系
    .Net Framework 4.0 和 2.0/3.0/3.5
    企业IT系统
  • 原文地址:https://www.cnblogs.com/onioncyc/p/6528164.html
Copyright © 2011-2022 走看看