首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(RGS 4/5)逆矩阵模m

(RGS 4/5)逆矩阵模m
EN

Code Golf用户
提问于 2020-03-07 08:13:31
回答 10查看 1.2K关注 0票数 19

任务

给定整数矩阵M和模m,求Mm的逆。如果矩阵M不是可逆模m,则不指定行为。

矩阵逆

如果M是平方矩阵,则其逆存在当且仅当它的行列式不是0。同样地,当我们讨论矩阵模m时,M的逆是存在的当且仅当M的行列式是可逆模m,当行列式与m相互作用时。

M的逆是一个平方矩阵inv(M),使得M*inv(M) = inv(M)*M = I,其中

I = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ 0 & 1 & 0 & \cdots & 0 \\ \vdots & \ddots & \ddots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 & 1 \end{bmatrix}

具有与M相同的形状,称为恒等矩阵。例如,考虑第一个测试用例,其中[[22, 43], [29, 37]][[26, 16], [38, 41]] mod 45相反:

\begin{bmatrix} 26&16\\38&41 \end{bmatrix} \cdot \begin{bmatrix} 22&43\\29&37 \end{bmatrix} = \begin{bmatrix} 1036&1710\\2025&3151 \end{bmatrix} \equiv \begin{bmatrix} 1 & 0 \\ 0&1 \end{bmatrix} \mod 45

输入

一个方阵M,其整数值介于0m-1之间,包含一个正整数m > 1。矩阵可以以任何合理的格式给出,包括

  • 列表列表,其中内部列表编码行(如M = [[1, 2], [3, 4]] )或扁平版本(如M = [1, 2, 3, 4] )。
  • 列表列表,其中内部列表编码列(如M = [[1, 3], [2, 4]] )或扁平版本(如M = [1, 3, 2, 4] )。

其中这些编码矩阵

\

表示模数的整数m

您也可以接受矩阵的大小作为输入。

输入可以按任何顺序进行。

输出

表示Mm的逆的矩阵。你可以假设这样的逆存在。更好的格式是每个矩阵条目a_{i,j}满足0 \leq a_{i,j} < m,但这只是为了便于与测试用例进行比较。

测试用例

代码语言:javascript
复制
45, [[26, 16], [38, 41]] -> [[22, 43], [29, 37]]

39, [[29, 50], [29, 1]] -> [[16, 19], [4, 35]]

35, [[24, 14], [48, 45]] -> [[5, 7], [4, 33]]

53, [[43, 20], [15, 8]] -> [[5, 14], [37, 7]]

49, [[15, 11, 30], [20, 12, 40], [33, 25, 2]] -> [[33, 28, 23], [25, 18, 0], [25, 48, 13]]

37, [[8, 9, 22, 17], [24, 30, 30, 19], [39, 8, 45, 23], [5, 30, 22, 33]] -> [[18, 17, 26, 20], [29, 36, 23, 1], [19, 0, 9, 3], [30, 23, 14, 21]]

这是密码-高尔夫所以最短的提交字节,赢!如果你喜欢这个挑战,考虑一下.打高尔夫球也很开心!

这是RGS高尔夫表演的第四个挑战。如果你想参加比赛,你有96个小时的时间提交你的合格答案。记住,在奖品中还有300个声誉!(见规则6)

此外,根据链接元员额规则第4节,第三项挑战的“受限语言”只有果冻V (vim)05AB1E,因此以这些语言提交的作品没有资格获得最终奖。但他们仍然可以被张贴!!

否则,这仍然是一个常规的密码-高尔夫挑战,所以享受吧!

EN

回答 10

Code Golf用户

发布于 2020-03-07 11:52:56

R,68字节

代码语言:javascript
复制
function(M,m,n,A=M){while(any(A%*%M%%m!=diag(n)))A[]=rpois(n^2,9)
A}

在网上试试!

慢得惊人。很可能会在TIO上暂停所有测试用例,但最终肯定会给出答案。

通过拒绝抽样来工作:生成随机矩阵A,每个值从Poisson(9)分布中提取,直到找到一个解决方案。

注意,要获得正确维度的A,将其初始化为A=M,然后用A[]=rpois(n^2,9)替换所有值比直接用A=matrix(rpois(n^2,9),n)创建它要短6个字节。

票数 10
EN

Code Golf用户

发布于 2020-03-07 09:59:48

Wolfram语言(数学),23字节

¯\_(ツ)_/ 模数的文档给出了答案

代码语言:javascript
复制
Inverse[#2,Modulus->#]&

在网上试试!

票数 6
EN

Code Golf用户

发布于 2020-03-07 11:18:12

果冻,25字节

代码语言:javascript
复制
ÆḊ×Ɱ⁹%ỊTḢ×ZÆḊ-Ƥ$-ƤNÐe⁺€Zʋ

在网上试试!

以矩阵为左参数,模数为右的二进链。返回矩阵。附加一个%以使其在0, m范围内

票数 4
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/200685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档