You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Affine加密中Modular Inverse的正确计算方法

搞定仿射加密的模逆元问题

嘿,我来帮你理清这个模逆元的困惑!首先得明确:你用的公式(n % 26 + 26) % 26根本不是求模逆元的方法——这个公式只是用来把任意整数(尤其是负数)转换成0到25之间的等价模26值,和模逆元完全是两码事,难怪结果不对呢。

先搞懂什么是模逆元

对于整数a和模数m,模逆元a'需要满足的核心条件是:(a * a') ≡ 1 mod m。而且只有当a和m互质(也就是它们的最大公约数gcd(a,m)=1)时,逆元才存在。比如你的例子里,5和26互质,所以存在逆元21,因为5*21=105,105%26=1,完美符合条件。

给你几种实用的模逆元求解方法

1. 扩展欧几里得算法(通用首选)

这是求模逆元的标准算法,核心思路是找到整数x和y,使得a*x + m*y = gcd(a,m)。当a和m互质时,gcd是1,此时x就是a模m的逆元(如果x是负数,再用你那个范围调整公式转成正数就行)。

拿你的例子a=5,m=26一步步算:

  • 26 = 5*5 + 1
  • 5 = 1*5 + 0
  • 回代推导:1 = 26 - 5*5 → 也就是5*(-5) + 26*1 = 1
  • 这里x=-5,转成模26的正数:(-5 %26 +26)%26=21,就是我们要的逆元。

2. 暴力枚举(小模数时超简单)

因为26是个很小的数,直接从1到25挨个试就行,看哪个数和5相乘后模26等于1:

  • 5*1=5 mod26≠1
  • 5*2=10≠1
  • ...
  • 5*21=105,105减去4个26(104)正好剩1,搞定!

3. 费马小定理(仅限模数是质数的情况)

如果你的模数是质数(比如字母表长度是29),那可以用这个快捷公式:a^(m-2) ≡ a' mod m。不过26不是质数,所以这个方法在这里用不上,记下来备用就好。

最后再划个重点

你之前用的公式是用来调整模运算结果范围的,不是求逆元的工具。选上面的任意一种方法(小模数推荐暴力枚举,通用场景用扩展欧几里得),就能得到正确的模逆元啦。

内容的提问来源于stack exchange,提问作者aymen medjader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:35:07