poj2429

題目鏈接: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);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章