1 条题解

  • 0
    @ 2024-09-16 11:39:23
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n,m,A,B,f1,f2;
    
    void mul(int f[2],int a[2][2])
    {
        int c[2];memset(c,0,sizeof c);
          for(int i=0;i<2;i++)
            for(int k=0;k<2;k++)
              c[i]=(c[i]+f[k]*a[k][i])%m;
        memcpy(f,c,sizeof c);
    }
    
    void mulself(int a[2][2])
    {
        int c[2][2];memset(c,0,sizeof c);
        for(int i=0;i<2;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              c[i][j]=(c[i][j]+a[i][k]*a[k][j])%m;
        memcpy(a,c,sizeof c);
    }
    
    signed main()
    {
        cin>>n>>m>>A>>B>>f1>>f2;
        n-=2; 
        int a[2][2]={{0ll,B%m},{1ll,A%m}},f[2]={f1%m,f2%m}; 
        while(n)
        {
            if(n&1)mul(f,a);
            mulself(a);
            n>>=1;
        }
        cout<<f[1];
        return 0;
    }
    
  • 1

信息

ID
1003
难度
9
分类
线性代数 | 矩阵乘法数论 | Fibonacci数列 点击显示
标签
递交数
5
已通过
1
通过率
20%
上传者