【问题标题】:Least Common Multiple of given numbers [duplicate]给定数字的最小公倍数[重复]
【发布时间】:2010-07-10 00:54:04
【问题描述】:

【问题讨论】:

标签: c++


【解决方案1】:

LCM(a,b) = abs(a * b) / gcd(a, b)

和 gcd 算法去那里:

gcd(a, b):
    if b = 0
       return a
    else
       return gcd(b, a % b)

【讨论】:

  • 为什么不呢?你有这个问题吗? “%”是java(不确定C++,可能是一样的)不是真正的mod(%),如果“a”是负数,那么值可能不是你想要的。
【解决方案2】:

如果hab的HCF(同GCD),那么LCMm

给出
m = a * (b / h)

由于 hab 分开,您应该先执行除法(如上),以减少溢出的风险。

现在您需要的只是 HCF 的算法。有很多,有些非常有效。 例如,请参阅http://rhubbarb.wordpress.com/2009/04/08/hcf-without-division/

对于许多数字而不是两个数字的 LCM 的情况,请注意例如

LCM(a,b,c) = LCM(LCM(a,b),c)

例如,请参阅 http://en.wikipedia.org/wiki/Least_common_multiplehttp://www.cut-the-knot.org/arithmetic/GcdLcmProperties.shtml

【讨论】:

    【解决方案3】:

    您首先通过 Euclid 算法 (google) 计算 GCD,然后使用 gcd(a,b) * lcm(a,b) = a*b,但要注意溢出。

    【讨论】:

      【解决方案4】:

      Wikipedia page for LCM 上描述了几种算法。

      【讨论】:

        【解决方案5】:

        这是一种思考方式:

        最小公倍数包含所有在 a 和 b 中但不重复的因子。

        最大公约数包含 a 和 b 共有的所有因数,否则这些因数会重复。

        LCM(a,b) =(仅 a 中的因子)*(仅 b 中的因子)*(a 和 b 中的因子)
        LCM(a,b) = (a / GCD(a,b)) * (b / GCD(a,b)) * GCD(a,b)
        LCM(a,b) = (a / GCD(a,b)) * b

        此公式计算小于a * b 的中间值,因此它比(a * b)/GCD(a,b) 更不容易溢出。

        【讨论】:

          【解决方案6】:

          将每个数字分解为一系列相乘的素数。消除第一个系列中也出现在第二个系列中的任何素数。将剩下的所有内容相乘。

          这个方法的不同解释可以在Wikipedia找到。

          【讨论】:

            【解决方案7】:

            一种不适合大数字的好方法是利用 GCD 和 LCM 的特性:

            int lcm(int a, int b)
            {
              return (a*b)/gcd(a,b);
            }
            

            您可以在哪里使用欧几里得算法轻松找到 GCD:

            int gcd(int a, int b)
            {
              if (b == 0)
                return a;
              else
                return gcd(b, a%b);
            }
            

            (当然这个算法也可以用迭代的方式表达,你可以很容易地在google上搜索或者自己尝试一下..)

            【讨论】:

            • 使用 (a*b) 容易溢出。
            猜你喜欢
            • 1970-01-01
            • 2017-03-27
            • 2020-07-11
            • 1970-01-01
            • 2021-07-16
            • 2010-09-13
            • 2016-11-19
            • 2020-10-12
            相关资源
            最近更新 更多