如何执行Modulo最大公约数?

时间:2016-10-25 23:01:32

标签: discrete-mathematics

假设gcd(e,m)= g。求整数d使得(e x d)= g mod m 其中m和e大于或等于1.

以下问题似乎可以用代数方法解决,但我已经尝试过这样做,它给了我一个整数。有时,d的解是整数,有时它不是。我该如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

d可以用扩展的euklidean算法计算,参见例如这里: https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm 该页面上的a,b是你的e,m,你的d将是x。

答案 1 :(得分:0)

也许您假设em都是整数,但问题是它们是非整数?当em都是整数时,只有一种情况会给出整数解。

为什么严格整数输出不是一个合理的结果e!= m

当你看到像3/7这样的分数时,并将其分母称为分子的“除数”,从经典的数学角度来看,这是一个松散的意义。当你谈到gcd(最大公约数)时,“d”指的是一个整数,它将均衡分子(整数),产生另一个整数:48的除数,因为8/4 = 22是一个整数。计算机科学或离散数学视角可能将除数定义为d的数字,当我们采用a0时,对于给定数字a % d给出a mod d离散数学)。你能看出除数的绝对值不能超过分子的绝对值吗?如果确实如此,你会得到一些馅饼,而不是整个馅饼 - 例如:

<{1}} 4 % a = 0(Z是整数集)a in Z(在数学符号中,该集合为:while |a| <= 4),但

{a ∈ Z : |a| <= 4}

4 % a != 0(数学:a in Z while |a| > 4 ),因为当我们将{a ∈ Z : |a| > 4}除以比4更大的东西时,我们得到分数(即5时的|4/a| < 1。不要太担心绝对价值的东西,如果它会把你抛弃 - 因为它们也是整数,所以要考虑使用负数。

因此,即使任何给定整数的“最大”除数也小于整数。否则它不是除数(见上文,或Wikipedia on divisors)。

查看|a| > 4

  • 根据gcd(e, m) = g(数学人%)的定义,对于任意两个数字modnumber1number2永远不会生成number1 % number2 }更大:number1
    • 所以替代:number1 % number2 <= number1 - &gt; (e * d) = g % m
  • 根据以上段落,gcd的定义是(e * d) <= ge的除数:m
  • 要生成g <= e, m,知道(e * d) <= g such that d, g are both integers g <= e以后g是[{1}}的除数,我们必须将左侧缩小以匹配e。如果另一个多重项是g或分数,则只能使用乘法使整数更小。问题指出0是一个整数,所以我们有一个案例可行 - d案例 - 和无数多个产生矛盾 - 与d = 0e相矛盾,和m都是整数。

如果d == e

这是m案例:

  • 如果d = 0,则e == m - 示例:gcd(e, m) = e = m3的最大公约数为3
  • 然后3(e * d) = g % m(e * d) = m % m因此m % m = 0暗示(e * d) = 0

d = 0d中的任何一个可能是非整数时,如何编码将找到e的函数:

许多除数问题都是迭代完成的,比如“找到gcd”或“找到素数”。这部分是因为这些问题严格处理整数,countable。出现此问题,我们需要允许me为非整数,以便为m以外的案例提供解决方案。但是,有理数的集合是不可数的,因此迭代解决方案最终会使程序崩溃。有了这个问题,你真的只想要一个公式,可能还有一些案例。您可以这样设置:

e = m

<强>最后:

根据您对此问题的处理方式,另一件可能有用的事情是,右侧始终是If e == m return 0 # since (e * d) = m % m -> d = 0 Else return g / e g,因为0来自g <= m {1}}是g的除数(参见上面的所有内容)。在mg < m的情况下。在g % m = gg == m

的情况下

带有欧几里得算法维基百科页面链接的@asp答案很好。

关于尝试使用数学特定版本的StackOverflow的@aidenhjj评论很好。

如果这是针对数学课程且您不习惯编码:g % m = 0<=>===是计算机代表的, ≥,“相等”,“不等于”。

祝你好运。