标签:java
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 9928 | Accepted: 1843 |
Description
Input
Output
Sample Input
3 60
Sample Output
12 15题意:给出你最大公约数和最小公倍数,让你求出原来的两个数a,b;特别的如果有多组的话,输出和最小的哪一组。
分析:由GCD和LCM之间的关系可得a*b/GCD= LCM; 没有特别的方法只好枚举,但是我们可以得出a*b = LCM/GCD;我们要找的是最后的和最小的,所以从sqrt(b/=a)开始到1枚举就好了。
注:如果用c/c++会超时的。最后经学长指导改用java就过了。。。又学了一招。
代码:
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); } }
poj 2429 GCD & LCM Inverse 【java】+【数学】
标签:java
原文地址:http://blog.csdn.net/shengweisong/article/details/41223195