矩阵快速幂 笔记

news/2025/2/11 16:01:31/文章来源:https://www.cnblogs.com/Garbage-fish/p/18709908

本文原在 2024-05-10 20:48 发布于本人洛谷博客。

一、简单介绍

一个 \(m\times n\) 的矩阵 \(A\) 可以和一个 \(n\times p\) 的矩阵 \(B\) 相乘,得到一个大小为 \(n\times p\) 的矩阵 \(C\),其中:

\[C_{i,j}=\sum_{k=1}^nA_{i,k}\times B_{k,j} \]

那么就可以用快速幂求矩阵幂了。

二、简单应用

1. P1962 斐波那契数列

\(f_1=f_2=1\)\(f_i=f_{i-1}+f_{i-2}\),求 \(f_n\bmod 10^9+7\)

我们假设矩阵 \(\begin{bmatrix}f_{i-1}&f_i\end{bmatrix}\) 乘上某一个矩阵之后可以得到 \(\begin{bmatrix}f_i&f_{i+1}\end{bmatrix}\),由于 \(f_i=0\times f_{i-1}+1\times f_i\)\(f_{i+1}=1\times f_{i-1}+1\times f_i\),所以:

\[\begin{bmatrix}f_{i-1}&f_i\end{bmatrix}\times\begin{bmatrix}0&1\\1&1\end{bmatrix}=\begin{bmatrix}f_i&f_{i+1}\end{bmatrix} \]

矩阵快速幂解决即可。

2. 数列

\(f_1=f_2=0\)\(f_i=7\times f_{i-1}+6\times f_{i-2}+4\times 3^i+5\times i\),求 \(f_n\bmod 10^9+7\)

同理,假设矩阵 \(\begin{bmatrix}f_{i-1}&f_i&4\times 3^i&5\times i&5\end{bmatrix}\) 乘上某一个矩阵可以得到 \(\begin{bmatrix}f_i&f_{i+1}&4\times 3^{i+1}&5\times (i+1)&5\end{bmatrix}\)

由于:

\[\left\{\begin{matrix} f_i&=&1\times f_i \\ f_{i+1}&=&6\times f_i+7\times f_{i-1}+3\times 4\times 3^i+1\times 5\times i+1\times 5 \\ 4\times 3^{i+1}&=&3\times 4\times 3^i \\ 5\times (i+1)&=&1\times 5\times i+1\times 5 \\ 5&=&1\times 5 \end{matrix}\right. \]

所以:

\[\begin{bmatrix}f_{i-1}&f_i&4\times 3^i&5\times i&5\end{bmatrix} \times \begin{bmatrix}0 & 6 & 0 & 0 & 0\\1 & 7 & 0 & 0 & 0\\0 & 3 & 3 & 0 & 0\\0 & 1 & 0 & 1 & 0\\0 & 1 & 0 & 1 & 1 \end{bmatrix} = \begin{bmatrix}f_i&f_{i+1}&4\times 3^{i+1}&5\times (i+1)&5\end{bmatrix} \]

3. CF691E Xor-sequences

给定一个数集 \(A\),现在你需要构造一个长度为 \(k\) 的序列 \(B\),序列 \(B\) 的元素从数集 \(A\) 中任意挑选,要求 \(B\) 中任意相邻的两个数字的异或值二进制表示中 \(1\) 的个数是 \(3\) 的倍数,求方案数,对 \(10^9+7\) 取模。

\(1\le n\le 100\)\(1\le k,a_i\le 10^{18}\)

\(f_{i,j}\) 表示当 \(B\) 序列长度为 \(i\),且最后一个选 \(j\) 的方案数,\(p(x)\) 表示 \(x\) 在二进制下 \(1\) 的个数,则:

\[f_{i+1,j}=\sum_{k=1}^n f_{i,k}[3\mid p(a_j\oplus a_k)] \]

最终答案即为 \(\sum_{i=1}^n f_{n,i}\)

考虑优化,由于每一个 \(j\) 都只能从固定的某几个 \(k\) 转移而来(因为 \(a_j\oplus a_k\) 的值与 \(i\) 无关),所以考虑矩阵加速。

假设 \(\begin{bmatrix} f_{i,1} & f_{i,2} & f_{i,3} & \dots & f_{i,n} \end{bmatrix}\) 乘上某个矩阵可以得到 \(\begin{bmatrix} f_{i+1,1} & f_{i+1,2} & f_{i+1,3} & \dots & f_{i+1,n} \end{bmatrix}\)\(c(j,k)\) 表示 \(3\mid p(a_j\oplus a_k)\)。根据上面的状态转移方程,这是一个 \(n\times n\) 的矩阵,第 \(i\) 行第 \(j\) 列的值就是 \(c(i,j)\),写个函数即可。

matrix b(n, n, false);
for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) b.d[i][j] = check(a[i], a[j]);
b = pow_matrix(b, k - 1);
int ans = 0;
for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) ans = (ans + b.d[i][j]) % mod;
cout << ans;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/882122.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7 - firewalld只允许国内ip访问

firewalld只允许国内ip访问 #查看public区域大致情况 firewall-cmd --zone=public --list-all #获取china ip源 wget --no-check-certificate -O- http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest | awk -F\| /CN\|ipv4/ { printf("%s/%d\n", $4, 32…

2025 寒假集训 第二期

2025 寒假集训 第二期 J - Shift and Flip 题意:给出两个 \(01\) 串 \(A,B\) ,要求使两串相等,可以执行以下三种操作将 \(A\) 左移一个单位 将 \(A\) 右移一个单位 选择一个位置 \(i\) 满足 \(B_i=1\) ,使 \(A_i\) 取反求最小操作数。 思路:不可能的情况只有当 \(B\) 全为…

为word中的图片批量添加边框

写报告时,经常会在word中插入几十张甚至是上百张图片,而为了美观,通常会为这些图片添加边框,但一个个添加显然是疯狂且愚蠢的,我们应该做一些更有效率的事情。 使用python-docx来实现我们的操作(由于各种原因,不会选择用宏) 首先观察一下图片加边框前后的文档结构变化(…

DeepSeek本地化部署超简单!快给你的大模型安排上聊天助手吧!

上一篇我们讲了如何把deepseek R1 安装部署到个人电脑上。(感兴趣的请跳转至 https://www.cnblogs.com/AI2025/p/18709288) 但是,我们部署完了发现,如果仅仅是只在黑漆漆的命令行里面去和AI对话聊天,感觉很不人性化,也不好用。那么,有没有更好的和AI交互聊天的工具呢? …

prometheus监控k8s并发送报警

1.编辑prometheus的configmap文件kubectl edit cm prometheus-1738826520-server2.添加如下红色字体apiVersion: v1 data:alerting_rules.yml: |-groups:- name: deployment Monitoringrules:- alert: DeploymentReplicasUnavailableexpr: kube_deployment_status_replicas_una…

VS2022 安装失败 : 未能安装包“Microsoft.VisualStudio.JavaScript.SDK_1.0.1738743,version=1.0.1738743”

VS2022 安装失败,异常提醒: 1、未能安装包“Microsoft.VisualStudio.JavaScript.SDK_1.0.1738743,version=1.0.1738743” 2、未能安装包“Microsoft.Windows.SDK.BuildTools_10.0.26100.1742,version=1.0.0.0” 问题原因,可以直接查看本地安装异常日志文件,文件中的描述应该…

项目管理证书报考条件:不同证书的对比分析

项目管理领域的证书众多,它们在行业内都具有一定的认可度和价值。对于有意投身项目管理行业或提升自身项目管理能力的人来说,了解不同证书的报考条件至关重要。这不仅关系到能否顺利报考,更影响着未来的职业发展方向。接下来,我们将对几种常见的项目管理证书报考条件进行对…

C# 迷宫求解算法,给出思路和例子。

C# 迷宫求解算法 迷宫求解通常可以使用 深度优先搜索(DFS)、广度优先搜索(BFS)、A(A-star)搜索* 或 Dijkstra 算法。以下是几种常见方法的思路及代码示例。1. 迷宫表示 迷宫通常可以使用 二维数组(char[,] 或 int[,])来表示:0 表示可以通过的路径 1 表示墙或障碍物 S(…

No.18 Kappa系数精度评价2.0

# Loading necessary libraries library(openxlsx) library(vcd)# Reading the Excel data AccData <- read.xlsx("D:/R_proj/a绘图demo/bKappa/五指山生态系统分类精度评价一二级类.xlsx",sheet = 1, colNames = T)# Handle missing values (replace NA with 0) …

什么是回溯法,给个C#简单的例子。

回溯法(Backtracking)是一种搜索算法,主要用于解决组合优化问题,如全排列、子集、数独、八皇后问题等。它通过递归的方式尝试所有可能的解决方案,并在发现当前路径无法得到正确答案时回溯到上一步,继续尝试其他路径。 回溯法的基本思想选择:选择一个可能的选项。 约束:…

如何挑选项目型企业管理系统?10款软件为你解答

本文介绍了以下10款项目型企业管理系统:1.Worktile;2.PingCode;3.Teambition;4.石墨文档;5.蓝鲸智云;6.Trello;7.Asana;8.Monday.com;9.Jira;10.Basecamp。在日益复杂的项目管理环境中,很多企业面临一个共同的挑战:如何高效、精准地管理多个项目、协调各方资源,并…

【新零售】新零售ERP如何对接第三方WMS

一、新零售业务中仓储相关的业务场景 在新零售的业务模式中,由于涉及到的SKU种类巨多,同时门店覆盖的地域广泛,再加上新零售业态有多种多样的玩法(即时零售、全渠道一盘货等),所以会对仓储物流方面提出更多、更高的要求。 1.1 常规备货、发货的场景 新零售公司得从供应商…