数学知识——矩阵乘法
创始人
2025-05-28 14:41:06
0

矩阵乘法

文章目录

  • 矩阵乘法
    • 引入
    • 例题
      • 斐波那契前 n 项和
        • 思路
        • 代码
      • 佳佳的斐波那契
        • 思路
        • 代码

引入

由于线性递推式可以表示成矩阵乘法的形式,也通常用矩阵快速幂来求线性递推数列的某一项。
利用结合律,矩阵乘法可以利用 快速幂 的思想来优化。

例题

斐波那契前 n 项和

大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2。

现在问题很简单,输入 n 和 m,求 fn 的前 n 项和 Snmodm。

输入格式
共一行,包含两个整数 n 和 m。

输出格式
输出前 n 项和 Snmodm 的值。

数据范围
1≤n≤2000000000
,
1≤m≤1000000010
输入样例:
5 1000
输出样例:
12

思路

已知递推公式Sn+1=Sn+fn+1S_{n + 1} = S_n + f_{n + 1}Sn+1​=Sn​+fn+1​,对于求Sn+1S_{n + 1}Sn+1​我们要知道Sn和fn+1S_n和f_{n + 1}Sn​和fn+1​。
构造矩阵Fn=[fn,fn+1,Sn]F_n = [f_n, f_{n + 1}, S_n]Fn​=[fn​,fn+1​,Sn​]。
对于Fn+1=[fn+1,fn+2,Sn+1]F_{n + 1} = [f_{n + 1}, f_{n + 2}, S_{n + 1}]Fn+1​=[fn+1​,fn+2​,Sn+1​]等于FnF_nFn​与矩阵A=[[0,1,0],[1,1,1],[0,0,1]]A = [[0, 1, 0], [1, 1, 1], [0, 0, 1]]A=[[0,1,0],[1,1,1],[0,0,1]]相乘,
对于Fn=F1∗An−1F_n = F_1 * A^{n - 1}Fn​=F1​∗An−1

代码

from copy import deepcopy
N = 3
F1 = [[0] * N for _ in range(N)]
F1[0] = [1, 1, 1]
A = [[0, 1, 0], [1, 1, 1], [0, 0, 1]]def mul(a, b) :tmp = [[0] * N for _ in range(N)]for i in range(N) : # i行for j in range(N) : # j列for k in range(N) :tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % mreturn tmpdef qmi(a, k) :res = deepcopy(F1)while k :if k & 1 :res = mul(res, a)k >>= 1a = mul(a, a)return res
n, m = map(int, input().split())
res = qmi(A, n - 1)
print(res[0][2])

佳佳的斐波那契

佳佳对数学,尤其对数列十分感兴趣。

在研究完 Fibonacci 数列后,他创造出许多稀奇古怪的数列。

例如用 S(n) 表示 Fibonacci 前 n项和 modm
的值,即 S(n)=(F1+F2+…+Fn)modm,其中 F1=F2=1,Fi=Fi−1+Fi−2。

可这对佳佳来说还是小菜一碟。

终于,她找到了一个自己解决不了的问题。

用 T(n)=(F1+2F2+3F3+…+nFn)modm 表示 Fibonacci 数列前 n 项变形后的和 modm 的值。

现在佳佳告诉你了一个 n 和 m,请求出 T(n) 的值。

输入格式
共一行,包含两个整数 n 和 m。

输出格式
共一行,输出 T(n) 的值。

数据范围
1≤n,m≤2^31−1
输入样例:
5 5
输出样例:
1
样例解释
T(5)=(1+2×1+3×2+4×3+5×5)mod5=1

思路

Tn+1=Tn+(n+1)∗fn+1T_{n + 1}= T_n + (n +1)* f_{n + 1}Tn+1​=Tn​+(n+1)∗fn+1​,矩阵乘法要使用快速幂推导,等式必须是线性的,也就是保证转移矩阵中只有常数。
对于求取TnT_nTn​,必须构造一个线性的递推公式(必须包含TnT_nTn​)的函数。
对于Pn=nSn−TnP_{n} = nS_n - T_nPn​=nSn​−Tn​有这样的递推公式Pn+1=Pn+SnP_{n + 1} = P_n + S_nPn+1​=Pn​+Sn​
构造Fn=[fn,fn+1,Sn,Pn]F_n = [f_n, f_{n + 1}, S_n, P_n]Fn​=[fn​,fn+1​,Sn​,Pn​],Fn+1=[fn+1,fn+2,Sn+1,Pn+1]F_{n + 1} = [f_{n + 1}, f_{n + 2}, S_{n + 1}, P_{n + 1}]Fn+1​=[fn+1​,fn+2​,Sn+1​,Pn+1​],
转移矩阵为A=[[0,1,0,0],[1,1,1,0],[0,0,1,1],[0,0,0,1]]A = [[0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1]]A=[[0,1,0,0],[1,1,1,0],[0,0,1,1],[0,0,0,1]]
Fn=F1∗An−1F_n = F_1* A^{n - 1}Fn​=F1​∗An−1

代码

from copy import deepcopy
N = 4
F1 = [[0] * N for _ in range(N)]
F1[0] = [1, 1, 1, 0]
A = [[0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 1, 1],[0, 0, 0, 1]]
def mul(a, b) :tmp = [[0] * N for _ in range(N)]for i in range(N) :for j in range(N) :for k in range(N) :tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % mreturn tmpdef qmi(a, k) :res = deepcopy(F1)while k :if k & 1 :res = mul(res, a)k >>= 1a = mul(a, a)return resn, m = map(int, input().split())
res = qmi(A, n - 1)
print((n * res[0][2] - res[0][3]) % m)

相关内容

热门资讯

容芯致远获天使轮融资 2026年5月8日,北京容芯致远科技有限公司(简称“容芯致远”)宣布完成天使轮融资。本轮融资由万利达...
试管期间能运动吗?避开这些坑,... 做试管的姐妹都纠结:不动怕气血差、影响卵泡,动了又怕伤子宫、毁着床,到底该怎么办?其实试管不用“躺平...
原创 今... 2026年5月6日,国内金价算是彻底“凉”了一下,你看那AU9999现货黄金,直接跌到了1013元一...
美国5月消费者信心再创历史新低... 财联社5月8日讯(编辑 牛占林)随着中东战争持续推高能源价格,美国消费者信心本月继续下滑,并再度刷新...
“压高盛一头”!江西一精神病院... 蓝鲸新闻5月8日讯(记者 徐甘甘)5月8日,盛通股份(002599.SZ)一季报引发资本市场热议——...
2026年企业短视频能力升级:... 本篇将回答的核心问题 2026年企业短视频营销面临哪些关键挑战,有效应对策略是什么? 服务机构的能力...
江西一精神病院炒股炒成上市公司... 红星资本局5月8日消息,近日,上市公司盛通股份(002599.SZ)发布一季报,披露了前十大股东名单...
企业IP打造指南:小公司低成本... 小公司做企业IP,不是为了装门面,而是让客户在没见到你之前,就能通过内容知道你是谁、你解决什么问题、...
官方:赵心童入选世界斯诺克名人... 北京时间5月8日消息,世界斯诺克巡回赛(WST)今日正式公布了2025/26赛季年终奖项及名人堂更新...
小灰熊AI学员王锋:希望能跟上... 35了,老程序员了。 从进入互联网行业到现在,其实已经做了很多年移动端开发。最早那几年,安卓行业发展...
原创 2... 2026年全国两会把稳定房地产市场列为重点工作,政府工作报告明确提出因城施策控增量、去库存、优供给。...
一年翻倍,六年未归——徽商银行... 文:向善财经 今年的港股市场,与A股市场出现了明显的分化。 A股这边,科技板块在AI浪潮中热闹非凡;...
古井贡酒2025:在行业深度调... 以“稳”为底、以“新”为翼。 文/每日财报 杜康 在行业库存高企、价格倒挂的背景下,当多数酒企在为...
好上好8408万收购鼎瑞芯加码... 5月7日晚,好上好(001298.SZ)抛出一份收购公告,拟以8408万元现金收购深圳市鼎瑞芯科技有...
全面大撤离!李嘉诚英国“套现”... 突发,李嘉诚又卖了。 这次,套现了455亿。 金额不少,但更值得关注的是透露着不同寻常的信号。 因为...
油气价格上涨加剧法国一季度贸易... 据新华社,法国海关7日发布的数据显示,受中东局势推高国际油气价格影响,法国今年第一季度贸易逆差扩大至...
昆仑芯启动科创板IPO上市辅导... 5月8日,据证监会官网显示,昆仑芯(北京)科技股份有限公司于2026年5月7日正式启动科创板上市辅导...
贵州茅台酒股份有限公司关于回购... 来源:上海证券报 证券代码:600519 证券简称:贵州茅台 公告编号:临2026-016 贵州茅...
百度昆仑芯启动科创板上市辅导,... 5月8日,证监会官网显示,昆仑芯(北京)科技股份有限公司 (下称“昆仑芯”)于2026年5月7日正式...
滕州信华的承压时刻:罚单、失信... 2026年4月末,滕州信华美元债单日跌近2%,关联方被列“老赖”。半年前,这家AA+城投曾因非市场化...