【问题标题】:least common divisors最小公约数
【发布时间】:2010-07-21 20:10:15
【问题描述】:

我正在尝试编写返回最小公约数的递归函数,或者例如让我们取 150 和 125,最大公约数是 25,而最小公约数是 5。我再次需要直接方法中的递归函数这是微不足道的。

【问题讨论】:

  • 我宁愿说 1 是最小公因数。
  • no 1 不是我的意思是所有数字>1
  • c = gcd(a, b) what_you_are_looking_for = a/c
  • @getekha - gcd(150, 125) = 25. 150 / 25 = 6. 6 不是 125 的除数。
  • 表现出一些努力,我们会提供帮助。我们不会只为你做功课。

标签: algorithm


【解决方案1】:

测试每个数字直到sqrt(min(a, b)):如果数字都可以被它整除,你就找到了。您只能根据需要测试素数。

如果您没有找到任何这样的数字,请检查另一个数字是否是最小值的倍数:如果是,则两者中的最小值就是解决方案。否则就没有办法了。

你可以做得更好。您最多只能到达sqrt(gcd(a, b))。这应该足够快了。

【讨论】:

    【解决方案2】:

    如果要查找数组元素的least common factor,可以先计算所有元素的GCD,然后求得到GCDleast prime factor...

    获取所有数组元素的gcd:-

    g=arr[0];
    for(i=1;i<arr.length();i++)
       g=gcd(g,arr[i]);
    

    现在,得到最小的素数循环直到sqrt(g)

    for(i=2;i<=sqrt(g);i++)
      if(g%i==0)
        return g
    

    【讨论】:

      【解决方案3】:

      Python 实现:
      上述解决方案不适用于最小公约数为 5 的数字 5 和 10 所以取平方根在这里不起作用

      from math import gcd
      def leastCommonPrimeDivisor(a, b):
          g=gcd(a,b)  # gcd of a and b
          for i in range(2,g+1):
              if g%i==0:
                  return i # returns least common divisor
          return -1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        相关资源
        最近更新 更多