Help me!!!
查看原帖
Help me!!!
159833
码迷元首楼主2022/12/17 11:44
#include<bits/stdc++.h>
using namespace std;

#define mod 1000000007
#define maxn 11

int n;
struct matrix
{
    long long data[maxn][maxn];
    int column,row;
    matrix(int r,int c,bool isI)
    {
        column=c;
        row=r;

        memset(data,0,sizeof(data));
        if(isI)
        {
            for(int i=0;i<row;i++)
                data[i][i]=1;
        }
    }
};
matrix operator *(const matrix &a,const matrix &b)
{
    matrix c(a.row,b.column,0);
    for(int i=0;i<a.row;i++)
        for(int j=0;i<b.column;j++)
            for(int k=0;k<a.column;k++)
                c.data[i][j]=(c.data[i][j]+a.data[i][k]*b.data[k][j])%mod;


    return c;
}
matrix pow(matrix base,int ex)
{
    matrix ans(base.row,base.column,1);
    for(;ex;ex>>=1)
    {
        if(ex&1)ans=ans*base;
        base=base*base;
    }
    return ans;
}
int main()
{
    cin>>n;
    if(n<=2)
        cout<<1;
    else
    {
        matrix coef(2,2,0),f(1,2,0),ans(1,2,0);
        coef.data[0][0]=0;
        coef.data[0][1]=1;
        coef.data[1][0]=1;
        coef.data[1][1]=1;

        f.data[0][0]=1;
        f.data[0][1]=1;
        ans=f*pow(coef,n-2);
        cout<<ans.data[0][1];
    }

}

2022/12/17 11:44
加载中...