최대공약수, 최소공배수 구하는 방법
기본 최대공약수 & 최소공배수
- 최대 공약수란
- 0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수입니다. 따라서 두 정수 a와 b의 최대 공약수는 a의 약수인 동시에 b의 약수인
즉, 두 정수 a,b의 공약수 중에서 가장 큰 수를 의미합니다.
- 0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수입니다. 따라서 두 정수 a와 b의 최대 공약수는 a의 약수인 동시에 b의 약수인
- 최소 공배수란
- 0이 아닌 두 개 이상의 정수의 양의 공배수 중에서 가장 작은 수입니다.
-
import java.util.Scanner; public class GreatestCommonDivisor_LeastCommonMultiple { public static void main(String[] args) { /* 최대 공약수와 최소 공배수 구하는 방법 실습 최대공약수 : 0이 아닌 두 개 이상의 정수의 공통되는 약수 중 가장 큰 수입니다. 따라서 a와 b의 최대공약수는 a의 약수인 동시에 b의 약수인 수 중에서 큰 수를 의미합니다. 초소공배수 : 0이 아닌 두 개 이상의 정수의 양의 공배수 중에서 가장 작은 수입니다. */ System.out.println("------------------최대 공약수 & 최소 공배수------------------"); Scanner in = new Scanner(System.in); System.out.print("숫자1 >>> "); int num1 = in.nextInt(); System.out.print("숫자2 >>> "); int num2 = in.nextInt(); for (int i = 1; i <= num1; i++) { if (num1 % i == 0) { System.out.println("num1의 약수 : " + i); } } for (int i = 1; i <= num2; i++) { if (num2 % i == 0) { System.out.println("num2의 약수 : " + i); } } int max = 0; // 최대 공약수 for (int i = 1; i <= num1 && i <= num2; i++) { if (num1 % i == 0 && num2 % i == 0) { max = i; } } int min = (num1 * num2) / max; // 최소 공백수 System.out.println("최대 공약수 : " + max); System.out.println("최소 공배수 : " + min); }
유클리드 호제법 최대공약수 & 최소공배수
- 2개의 자연수 (또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면 (단, a > b가 성립한다는 가정하에), a와 b의 최대 공약수는 b와 r의 최대공약수와 같습니다.
-
import java.util.Scanner; public class GreatestCommonDivisor_LeastCommonMultiple { public static void main(String[] args) { /* 최대 공약수와 최소 공배수 구하는 방법 실습 최대공약수 : 0이 아닌 두 개 이상의 정수의 공통되는 약수 중 가장 큰 수입니다. 따라서 a와 b의 최대공약수는 a의 약수인 동시에 b의 약수인 수 중에서 큰 수를 의미합니다. 초소공배수 : 0이 아닌 두 개 이상의 정수의 양의 공배수 중에서 가장 작은 수입니다. */ System.out.println("------------------최대 공약수 & 최소 공배수------------------"); Scanner in = new Scanner(System.in); System.out.print("숫자1 >>> "); int num1 = in.nextInt(); System.out.print("숫자2 >>> "); int num2 = in.nextInt(); System.out.println("유클리드 호제법 최대공약수 : " + EuclideanAlgorithmGreatestCommonDivisor(num1, num2)); System.out.println("유클리드 호제법 최소공배수 : " + EuclideanAlgorithmLeastCommonMultiple(num1, num2)); } static int EuclideanAlgorithmGreatestCommonDivisor (int num1, int num2) { // 유클리드 호제법 최대공약수 if (num1 < num2) { // 유클리드 호제법 조건 int temp = num1; num1 = num2; num2 = temp; } while (num2 != 0) { int r = num1 % num2; num1 = num2; num2 = r; } return num1; } static int EuclideanAlgorithmLeastCommonMultiple (int num1, int num2) { // 유클리드 호제법 최소공배수 return num1 * num2 / EuclideanAlgorithmGreatestCommonDivisor(num1, num2); } }
'JAVA' 카테고리의 다른 글
[JAVA] - 객체 지향 설계 5원칙 - S.O.L.I.D & 특징 4가지 (추상화, 상속, 다형성, 캡슐화) (1) | 2024.03.13 |
---|---|
[JAVA] - Collections Framework 정리 (0) | 2024.03.06 |
[JAVA] - 진법 변환 정리 (0) | 2024.02.18 |
[JAVA] - Object (equals, toString) 클래스 (0) | 2024.02.14 |
[JAVA] - 인스턴스 멤버와 정적 멤버 (0) | 2024.01.31 |