我已经使用欧几里得的方法来找到两个数字的 LCM。
l.c.m=a*b/(gcd(a,b))
如果不使用这个算法,我怎么能做到这一点?我有一个想法,首先获取这两个数字的所有因子并将它们存储在数组中。然后从数组 1 中取出 1 个元素并在数组 2 中搜索它,如果它存在则从那里删除它并使结果乘以该 num。
这个可以吗?
我相信您建议的算法是一种使用表格的方法,请检查它是否适合您。
几乎。4和8的LCM是多少?显然是 8 (2 3 ),但在您的方法中您会找到 2。您不仅需要跟踪所有因素,还需要跟踪它们出现的频率。
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++;
}
}
}
首先获得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;
}
}