我正在尝试编写一个解密任何Affine cipher
。
的代码
现在,我发现解密功能是:
y = a^(-1) * (x-b) mod 26
问题是:当x
小于b
时,答案是否定的。
我知道这是一个数学问题而不是代码问题,但我希望有一些好人可以帮助我。
答案 0 :(得分:1)
这实际上是一个跨越数学和编程的问题。
首先,数学家和程序员使用" mod"有点不同。
数学家将它用作关于他们刚写的等式的陈述。当他们说" a = b + c mod m"他们的意思是" a = b + c"以模数运算。
另一方面,程序员使用mod作为运算符,在整数除法后提供余数。
其次,有多种方法可以定义整数除法" floored division"," truncated division"和"欧几里德分部"因此有多种方法来定义模运算符。
不幸的是,你的算法需要的是"余下的分区"但是你的编程语言给你的是截断分割后的剩余部分。
一种可能的解决方法是简单地添加if语句。
if (y < 0) y += 26