• E. Product Oriented Recurrence(矩阵快速幂+欧拉降幂)


    在这里插入图片描述

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 300005
    #define ll long long
    const int mod = 1e9+7;
    const int modd = 1e9+6;       //欧拉降幂
    
    ll n,f1,f2,f3,c;
    int b[10][10];
    struct Mat{                  //矩阵快速幂
        ll m[10][10];
        Mat(){
            memset(m,0,sizeof(m));
        }
        inline void build(int len){
            for(int i=1;i<=len;i++)m[i][i]=1;
        }
    }a;
    
    Mat Mul(Mat x,Mat y,int len){
        Mat c;
        for(int i=1;i<=len;i++)
            for(int j=1;j<=len;j++)
                for(int k=1;k<=len;k++)
                    c.m[j][i]=(c.m[j][i]+x.m[j][k]*y.m[k][i]%modd)%modd;     //欧拉降幂
        return c;
    }
    
    Mat poww(Mat x,ll y,int len){
        Mat aa;aa.build(len);
        while(y){
            if(y&1)aa=Mul(aa,x,len);
            x=Mul(x,x,len);
            y>>=1;
        }
        return aa;
    }
    
    ll poww2(ll x,ll y){
        ll ans=1;
        while(y){
            if(y&1)ans=(ans*x)%mod;
            x=x*x%mod;
            y>>=1;
        }
        return ans%mod;
    }
    
    ll wow(Mat s,int k){
        if(k==1)return s.m[3][1];
        else if(k==2)return s.m[2][1];
        else return s.m[1][1];
    }
    
    int main()
    {
        cin>>n>>f1>>f2>>f3>>c;
        a.m[1][1]=1,a.m[2][1]=1,a.m[3][1]=1;    //构建矩阵
        a.m[1][2]=1,a.m[2][2]=0,a.m[3][2]=0;
        a.m[1][3]=0,a.m[2][3]=1,a.m[3][3]=0;
        Mat ans1=poww(a,n-3,3);
        ll ans11=wow(ans1,1),ans12=wow(ans1,2),ans13=wow(ans1,3);
        a.m[4][1]=1;a.m[5][1]=0;              //构建矩阵2
        a.m[4][2]=0;a.m[5][2]=0;
        a.m[4][3]=0;a.m[5][3]=0;
        a.m[4][4]=1;a.m[5][4]=1;
        a.m[4][5]=0;a.m[5][5]=1;
        Mat ans2=poww(a,n-3,5);
        ll ans22=2*ans2.m[4][1]%modd+2*ans2.m[5][1]%modd;  //欧拉降幂
        ans22%=modd;                                       //欧拉降幂
        printf("%lld",poww2(f1,ans11)*poww2(f2,ans12)%mod*poww2(f3,ans13)%mod*poww2(c,ans22)%mod);
        return 0;
    }
    希望用自己的努力为自己赢得荣誉。
  • 相关阅读:
    GIT提交修改的项目到远程仓库
    MySQL基础知识总结
    IDEA集成码云gitee
    SpringBoot整合ueditor编辑器
    word2010中统一调整表格格式
    Afinal简介和使用方法
    Java 8 安装——使用华为镜像
    微信小程序调用第三方组件
    webpack-dev-server first try
    性能测试应用领域
  • 原文地址:https://www.cnblogs.com/Mmasker/p/11917476.html
Copyright © 2020-2023  润新知