백준공부/java
[백준] 2436번 공약수 (gold 5
gomduri43
2024. 2. 27. 11:41
import java.io.*;
import java.util.*;
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());
long a=Long.valueOf(st.nextToken());
long b=Long.valueOf(st.nextToken());
long temp=a*b;
long answer1=0;
long answer2=0;
long min=Long.MAX_VALUE;
for(long i=a; i<=b; i+=a){
if((temp%i==0 && i+temp/i<min) && a==gcd(i,temp/i)){
answer1=i;
answer2=temp/i;
min=answer1+answer2;
}
}
bw.write(answer1+" "+answer2);
bw.flush();
}
public static long gcd(long a, long b){
long temp=a%b;
if(temp==0){
return b;
}
else{
return gcd(b, temp);
}
}
}
// 두 수를 얻는 케이스는 공약수 * 공배수의 값을 가지는 최대공약수의 배수들의 짝이다.
// 이때 두 수들이 과연 그 최대공약수가 유지되는지를 확인해야 하므로 체크.
// 프로그래밍 언어에서 /사용시 나머지는 버리므로 그를 이용하여 %==0인지를 확인해야함.