首页 > 其他分享 >Matrix Power Series

Matrix Power Series

时间:2023-08-15 17:57:19浏览次数:36  
标签:return Matrix 递归 int Series sum 矩阵 add Power

描述

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

题意

已知矩阵A,算A^1+A^2+....+A^k,元素对m取模

二分递归,如果k为偶数,,因为是等比矩阵,所以前一半和后一半就有一个比例,所以sum(1,k)=sum(1,k/2)+sum(1,k/2)*A^(k/2),继续递归下去

如果k为奇数那么最后一项单独考虑sum(1,k)=sum(1,k/2)+sum(1,k/2)*A^(k/2)+A^k,继续递归直到k=1返回A

递归次数为log(k)

#include <bits/stdc++.h>
using namespace std;
struct d//矩阵
{
    int a[31][31];
};
int n,k,m;
d dw;//单位矩阵
d add(d x,d y)//矩阵加法
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            x.a[i][j]+=y.a[i][j];
            x.a[i][j]%=m;
        }
    return x;
}
d cheng(d x,d y)//矩阵乘法
{
    d ans;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            ans.a[i][j]=0;
            for(int kk=1;kk<=n;kk++)
            {
                ans.a[i][j]+=x.a[i][kk]*y.a[kk][j];
                ans.a[i][j]%=m;
            }
        }

    return ans;
}
d mi(d x,int b)//矩阵快速幂
{
    d ans=dw;
    while(b)
    {
        if(b&1) ans=cheng(ans,x);
        b>>=1;
        x=cheng(x,x);
    }
    return ans;
}
d A;
d aans;
d t;
d sl(int r)//对(1,r)进行递归
{
    if(r==1)
        return A;
    t=sl(r/2);
    if(r&1)//奇数
    {
        return add(add(t,cheng(t,mi(A,r/2))),mi(A,r));
    }
    else//偶数
    {
        return add(t,cheng(t,mi(A,r/2)));
    }
}
void solve()
{
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++)
        dw.a[i][i]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            cin>>A.a[i][j];
            aans.a[i][j]=0;
        }
    aans=sl(k);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(j!=1) cout<<" ";
            cout<<aans.a[i][j];
        }
        cout<<endl;
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
//    freopen(R"(C:\Users\LENOVO\Desktop\c++\in.txt)","r",stdin);
//    freopen(R"(C:\Users\LENOVO\Desktop\c++\out.txt)","w",stdout);
    long long _=1;
//    cin>>_;
    while(_--) solve();
}

 

标签:return,Matrix,递归,int,Series,sum,矩阵,add,Power
From: https://www.cnblogs.com/sleepaday/p/17632005.html

相关文章

  • tzoj7929: Matrix Power Series
     题意给定一个n*n大小的矩阵A,求以A为公比的等比数列的前k项和。解题思路直接从1到k矩阵快速幂每项相加肯定是会超时的,而如果用公式计算需要求逆矩阵非常麻烦,而且有可能会溢出。因此我们使用分治求解。当n为奇数时, 当n为偶数时, 分治求解即可。#include<bits/stdc+......
  • Excel:Power Automate VS UiPath
    读取和写入差别:PowerAutomate需要通过激活Sheet来确定写入那个Sheet,VBA操作逻辑一样;而UiPath用一个写入控件就可以直接指定写入的Sheet,符合开发逻辑。 ......
  • PowerShell 使用SqlScriptDOM对T-SQL做规则校验
    ​ 对于数据项目来说,编写Sql是一项基本任务同时也是数量最多的代码。为了统一项目代码规范同时降低CodeReview的成本,因此需要通过自动化的方式来进行规则校验。由于本人所在的项目以SQLServer数据库为基础,于是本人决定通过使用SqlScriptDom类库来做T-SQL的规则校验。如果是其......
  • 威力导演 PowerDirector官方电脑版 官方版特色
    威力导演PowerDirectorUltimate21版是一款专业级的视频编辑和制作工具,无论您是以360、UltraHD4K还是最新的在线媒体格式进行编辑,《威力导演》仍然是适合任何人的可靠视频编辑解决方案,无论他们是初学者还是专业人士。欢迎需要的伙伴前来下载使用。威力导演最出色的新功能之一......
  • Vulnhub 靶场 MATRIX-BREAKOUT: 2 MORPHEUS
    前期准备:靶机地址:https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/kali攻击机ip:192.168.11.11靶机ip:192.168.11.12一、信息收集及利用1.使用nmap对目标靶机进行扫描发现开放了22、80、81端口。2.80端口访问80端口:查看页面信息没发现什么重要信息,......
  • Codeforces 1857E:Power of Points 区间?
    1857E.PowerofPointsDescription:\(n\)个数:\(x_1,···,x_n\),从左向右扫,当\(s=x_i\)时,可以将这\(n\)个数分为若干个闭区间\([s,x_1],[s,x_2],···,[s,x_n]\)(当然如果\(x_i<s\),则区间形如\([x_i,s]\))对于每一个\(s\in(x_1,···,x_n),\)有一个整数\(p\),记\(f_......
  • 如何利用PowerShell来监控一个进程中的线程数
    如何利用PowerShell来监控一个进程实际产生了多少个线程$processName="chrome.exe"$process=Get-WmiObject-Query"SELECT*FROMWin32_ProcessWHEREName='$processName'"$threadCount=$process.ThreadCountWrite-Host"Thenumberofthreadsin......
  • powercli脚本根据模版批量创建虚拟机
    catVM.csvName,Template,PhysicalHost,Datastore,Networkmgt,Networkpro,IPV4mgt,Cpu,Memory,DISK,Usage,cdirp1_caiwu_web001,win2016,10.18.44.13,NAS03,P1_MGT_9,P1_PRO_c1_1109,10.10.124.130,6,32,350,Safe-app,caiwuchufunctionConnectToVCenter{param(......
  • win11 PowerShell关闭拆分选项卡窗框窗口
    PowerShell拆分窗格一、拆分选项卡窗格1.鼠标操作:2.快捷键操作:Alt+Shift+d、Alt+Shift+minus、Alt+Shift+plus没点一次,就在当前选项卡上拆分一次。minus:键盘上-减号键plus:键盘上+加号键COMMA键盘上的“逗号”equal键盘上的“=”二、关闭拆分......
  • Power BI: 如何在PPT中展示PowerBI报告?
    问题描述:今天业务同事来找我询问如何才能把PowerBI报告在PPT中展示。这样在讲述PPT的时候,可以让故事连续性更好,效果也会更好。当前两个方法存在的痛点:在展示报告的时候,通过链接之类的功能跳转回PowerBI的Service站点,非常容易让听众出戏。把需要展示的PowerBI做成......