1 条题解

  • 0
    @ 2025-4-14 18:41:37

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    long long n;
    const long long mod=1e9+7;
    struct Mat{
        long long m[2][2];
    };
    
    Mat mut(Mat a,Mat b)
    {
        Mat ans;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                ans.m[i][j]=0;
                for(int k=0;k<2;k++)
                {
                    ans.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod;
                    ans.m[i][j]%=mod;
                }
            }
        }
        return ans;
    }
    
    Mat power(Mat a,long long p)
    {
        Mat ans;
        memset(ans.m,0,sizeof(ans.m));
        for(int i=0;i<2;i++)
        {
            ans.m[i][i]=1;
        }
        while(p)
        {
            if(p%2==0)
            {
                a=mut(a,a);
                p/=2;
            }
            else
            {
                ans=mut(ans,a);
                p--;
            }
        }
        return ans;
    }
    
    int main()
    {
       // freopen( "C.txt", "r", stdin );
        //freopen( "_C.txt", "w", stdout );
        while(cin>>n)
        {
            Mat ans;
            ans.m[0][0]=ans.m[1][1]=3;
            ans.m[0][1]=ans.m[1][0]=1;
            ans=power(ans,n);
            cout<<ans.m[0][0]%mod<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    3073
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者