문제
https://www.acmicpc.net/problem/2609
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
풀이
최대공약수와 최소공배수를 구할 때 유클리드 호제법을 이용하면 빠르게 구할 수 있다.
유클리드 호제법에 따라 GCD(a,b)=GCD(b,r)이다. (증명은 생략 ^___^)
이를 이용하여 재귀적으로 최대공약수를 구한다. (반복문을 통해서도 구할 수 있다.) b가 0이 된다는 것은 나머지가 0, 즉 나누어떨어진다는 뜻이므로 b가 0이 되면 a를 return한다.
최소공배수는 두 수의 곱을 최대공약수로 나눈 것이기 때문에 두 자연수를 곱한 후 방금 구한 최대공약수로 입력받은 나누어주면 된다.
코드
package 정수론및조합론;
import java.util.Scanner;
public class No2609_최대공약수와최소공배수 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int gcd=gcd(a,b);
System.out.println(gcd);
System.out.println(a*b/gcd);
}
public static int gcd(int a, int b) {
if(b==0)return a;
else return gcd(b, a%b);
}
}
'알고리즘연습 > 백준' 카테고리의 다른 글
[백준] 정수론및조합론 - 2981번 검문 java 자바 (0) | 2021.07.17 |
---|---|
[백준] 정수론및조합론 - 1934번 최소공배수 java 자바 (0) | 2021.07.15 |
[백준] 정수론 및 조합론 - 1037번 약수 java 자바 (0) | 2021.07.11 |
[백준] 그리디알고리즘 - 13305번 주유소 java 자바 (0) | 2021.07.09 |
[백준] 그리디알고리즘 - 1541번 잃어버린 괄호 java 자바 (0) | 2021.07.07 |