【发布时间】:2015-09-29 13:58:49
【问题描述】:
我已经阅读了很多关于这个主题的文章,关于欧几里得算法,我在这里找到了这个主题所需的所有参考资料:
(我的问题的最佳来源)-> Math Explanation
另一个很好的例子 -> Math Explanation 2
维基 -> Extended Euclidean
添加值的好答案 -> Add Operation
这是我完全失去它的地方 -> AFFINE CIPHERS
但是,在所有这些来源中,我仍然无法理解如何通过代码(或伪代码)来实现它,或者至少找不到编写它的方法。
所以我会写基础知识,假设我有这个公式:
(x * key) % mod = 结果
0 0 0
key 和 mod 是常量。
* 表示 乘法 运算
% 表示 余数 运算(编辑澄清)
x 和 结果是动态的。
我想创建一个公式,通过 Java 代码为我提供 x。
为我计算result的函数是:
private int MultModulus(int num, int key, int mod)
{
return (num * key) % mod;
}
我怎样才能找到 X?我应该写什么来计算它?这是我不明白的地方,假设我的函数签名是:
private int InverseMultModulus(int result, int key, int mod)
{
x = ...
return x;
}
【问题讨论】:
-
一个小信息。
%是余数运算符,而不是模计算的数学表示。这就是例如Math#floorMod的用途。 -
哦,在那种情况下,请澄清我的意思是余数运算符。
-
问题没有明确说明。通常有多个可能的
x值。你要哪个? -
没有唯一的答案。例如。如果
result == 1、mod == 2和key == 3、x可以是任何正奇数。 -
对于加法运算,只有一种解法,乘法有多个答案怎么办?我带来的消息来源表明,假设只有 1 个正确答案。如果我理解正确的话。
标签: java multiplication modulus inverse