Encryption 如果x<;b在a^(-1)*(x-b)模块m中?

Encryption 如果x<;b在a^(-1)*(x-b)模块m中?,encryption,Encryption,我正试图写一个能解密任何仿射密码的代码 现在,我发现解密函数是: y=a^(-1)*(x-b)mod 26 问题是:当x小于b时,答案是否定的 我知道这是一个数学问题,而不是一个代码问题,但我希望有一些好人可以帮助我。这实际上是一个横跨数学和编程的问题 首先,数学家和程序员使用“mod”的方式有些不同 数学家们用它来说明他们刚刚写的方程式。当他们说“a=b+c模m”时,他们的意思是模m算术中的“a=b+c” 另一方面,程序员使用mod作为运算符,提供整数除法后的余数 其次,有多种定义整数除法的方

我正试图写一个能解密任何
仿射密码的代码

现在,我发现解密函数是:

y=a^(-1)*(x-b)mod 26

问题是:当
x
小于
b
时,答案是否定的


我知道这是一个数学问题,而不是一个代码问题,但我希望有一些好人可以帮助我。

这实际上是一个横跨数学和编程的问题

首先,数学家和程序员使用“mod”的方式有些不同

数学家们用它来说明他们刚刚写的方程式。当他们说“a=b+c模m”时,他们的意思是模m算术中的“a=b+c”

另一方面,程序员使用mod作为运算符,提供整数除法后的余数

其次,有多种定义整数除法的方法,如“地板除法”、“截断除法”和“欧几里德除法”,因此有多种定义模算子的方法

不幸的是,您的算法需要的是“整除后的余数”,但您的编程语言提供的是“截断除法后的余数”

一种可能的修复方法是简单地添加if语句

if (y < 0) y += 26
如果(y<0)y+=26

您可以使用此标识:(-x)mod n==(n-(x%n))%nI不明白..或
((x-b)mod 26+26)mod 26
来摆脱
if
语句。还有一些其他选项,但使用
((x mod n)+n)mod n
通常是一种有效的方法。假设编译器没有对其进行优化,这将保存一个分支,但会添加第二个mod操作。这是否更好可能取决于CPU目标。