题目链接:http://poj.org/problem?id=2429
题意:给出a,b两个数的最小公倍数和最大公约数,求出a,b,并且a+b最小
解题思路:这题我没有想出什么简便的方法,只能用枚举的方法。在枚举之前,必须要进行一些预处理。首先,我们要知道的是:
a*b=GCD(a,b)*LCM(a,b);
GCD(a,b)=G,
GCD(a/G,b/G)=1,
LCM(a/G,b/G)=a/G*b/G=a*b/(G*G)=LCM(a,b)/G;
所以,要想枚举求出a,b。我们只需要求出a/G,b/G。要想a+b最小,只要a,b最接近就可以了。那个从sqrt(LCM(a,b)/G),枚举就可以了。
import java.util.Scanner;
import java.math.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
long a, b, x, y;
while(cin.hasNext()){
a = cin.nextLong();
b = cin.nextLong();
x = y = 0;
b /= a;
for(long i = (long)Math.sqrt(b); i > 0; i --){
if(b%i == 0&&gcd(i, b/i) == 1){
x = i*a; y = b/i*a; break;
}
}
System.out.println(x+" "+y);
}
}
public static long gcd(long a, long b){
if(a<b){
long t =a; a = b; b = t;
}
if(b == 0) return a;
else return gcd(b, a%b);
}
}