如何找到两个数字的最小公倍数(LCM)

时间:2011-11-01 14:57:42

标签: java c++ math lcm

我使用欧几里德的方法找到两个数字的L.C.M.

l.c.m=a*b/(gcd(a,b))

如何在不使用此算法的情况下执行此操作? 我有一个想法,首先得到这两个数字的所有因素,并将它们存储在数组中。然后从数组1中取出1个元素并在array2中搜索它,如果存在则从那里移除然后将结果乘以该数字。

这样可以吗?

4 个答案:

答案 0 :(得分:1)

我相信您建议的算法是a method using a table,请检查它是否适合您。

答案 1 :(得分:1)

几乎。什么是4和8的最小公倍数?显然是8(2 3 ),但在你的方法中你会发现2.你需要不仅跟踪所有因素,还要跟踪它们出现的频率。

答案 2 :(得分:1)

LCM(最小公倍数)始终大于或等于两个数字中的较大者。因此,我们将首先通过检查较大的数字是否可被较小的数字整除来检查较大的数字本身是否为两个数字的LCM;如果是,则找到LCM;否则,我们将较大的数字加1并再次检查。

package com.company;
import java.util.Scanner;

public class Main {

public static void main(String args[]) {
    Scanner scan = new Scanner(System.in);
    System.out.print("Enter the first Number : ");
    int number1 = scan.nextInt();
    System.out.print("Enter the second number : ");
    int number2 =scan.nextInt();

    int multiple;

    if(number1 >= number2) {
        multiple = number1;
    } else {
        multiple = number2;
    }

    Boolean loopContinue = true;

    while(loopContinue) {
        if(multiple % number1 == 0 && multiple % number2 == 0) {
            System.out.println("LCM of Two Numbers is " + multiple);
            loopContinue = false;
        }
        multiple++;
    }
  }
}

答案 3 :(得分:0)

您可以通过首先获取GCD来获得两个数字的LCM。 这是上述解决方案。

package com.practice.competitive.maths;

import java.util.Scanner;

public class LCMandGCD {

    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            int testCases = scanner.nextInt();
            while (testCases-- > 0) {
                long number1 = scanner.nextInt();
                long number2 = scanner.nextInt();
                long gcd = computeGCD(number1, number2);
                long lcm = computeLCM(number1, number2, gcd);
                System.out.println(lcm + " " + gcd);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static long computeGCD(long number1, long number2) {
        while (number1 != number2) {
            if (number1 > number2)
                number1 -= number2;
            else
                number2 -= number1;
        }   
        return number2;
    }

    private static long computeLCM(long number1, long number2, long gcd) {
        return (number1*number2)/gcd;
    }

}