728x90
유클리드 호제법을 사용하면 O(logN)까지 줄일 수 있다.
1071과 1029의 최대공약수를 구하면,
- 1071은 1029로 나누어떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. ≫ 42
- 1029는 42로 나누어떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. ≫ 21
- 42는 21로 나누어떨어진다.
따라서, 최대공약수는 21이다.
최소 공배수는 1071*1029 / 두수의 최대 공약수 이다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int p = Integer.parseInt(st.nextToken());
int q = Integer.parseInt(st.nextToken());
int gcd = GCD(p,q);
bw.write(gcd+"\n"+(p*q)/gcd);
bw.close();
}
static int GCD(int p, int q)
{
if(p < q){
int tmp = p;
p = q;
q = tmp;
}
if(q == 0)
return p;
return GCD(q,p%q);
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[코드 가림][BOJ] 백준 7579번 앱 - Java (0) | 2021.01.18 |
---|---|
[코드 가림][BOJ] 백준 1256번 사전- Java (1) | 2021.01.17 |
[코드 가림][BOJ] 백준 16287번 Parcel - Java (0) | 2021.01.17 |
[BOJ] 백준 2560번 짚신벌레 - Java (0) | 2021.01.07 |
[BOJ] 백준 2096번 내려가기 - Java (0) | 2021.01.07 |