math - 反转mod的功能?
问题描述
我正在尝试解决这个等式:
(b(ax+b ) - c) % n = e
除了x
我尝试了以下方法之外,一切都给出了:
(A + x) % B = C
(B + C - A) % B = x
在哪里A
,(-c)
然后手动解决给x
定我的其他潜艇,但我没有得到正确的输出。我可能需要使用eea吗?任何帮助,将不胜感激!我知道有人问过这个问题,我尝试了他们的解决方案,但对我不起作用。
解决方案
(b*(a*x+b) - c) % n = e
可以改写为:
(b*a*x) % n = (e - b*b + c) % n
x = ((e - b*b + c) * modular_inverse(b*a, n)) % n
其中 , 的模逆是这样的数字。有关计算模逆的代码,请参见此问题。u
modular_inverse(u, n)
v
u*v % n == 1
一些警告:
- 当简化模方程时,你永远不能简单地除法,你需要乘以模逆。
- 没有直接的公式来计算模逆,但是有一个简单、快速的算法来计算它,类似于计算gcd。
- 模逆并不总是存在。
- 根据编程语言,当一个或两个参数为负时,模的结果也可能为负。
- 由于每个解决方案都适用于每个
x
modulo ,因此只有n
少量的数字需要测试,所以在许多情况下,一个简单的循环就足够了。n
0
n-1
推荐阅读
- reactjs - 在 React(typescript) 中使用扩展运算符设置状态返回 TypeError: Invalid attempt to spread non-iterable instance
- python - Numpy 结合高级和基本索引不会产生我期望的形状
- amazon-web-services - 将具有默认值的新属性添加到现有 dynamodb 表的最有效方法是什么
- javascript - 如何停止在特定页面上显示粘性浮动页脚栏和 wordpress 中的帖子?
- python - 在 .after 在 tkinter 中引用它自己的函数
- spring-boot - 即使在 springboot 就绪探测处于 REFUSING_TRAFFIC 阶段后,Kubelet 仍会发送请求
- upload - 无法通过 Eclipse 中的数字服务器上传代码
- drag-and-drop - 使用 Draggable 时如何在一个容器下同时具有可排序和可交换?
- android-fragments - 如何将高度片段对话框与 onClick 匹配?
- vb.net - 使用 VB.Net 在文本文件中部署代码