백준공부/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인지를 확인해야함.