UVA 11388 - GCD LCM 水~
题目大意:
输入两个数G,L找出两个正整数a 和b,使得二者的最大公约数为G,最小公倍数为L,如果有多解,输出a<=b且a最小的解,无解则输出-1
思路:
方法一:
显然有G<= a <=b <=L成立。题目要求(a<=b)
所以如果有解,a最小值只能为G。 a * b = G * :L所以 b = L
什么时候无解呢?
如果L 不能整除 G 就无解了嘛。
#include<cstdio> int main() { int T; scanf("%d",&T); while(T--) { int G,L; scanf("%d%d",&G,&L); if(L%G!=0) printf("-1\n"); else printf("%d %d\n",G,L); } }
方法二:
比较笨的方法
a * b = G * L 如果 L %G!=0无解,如果有解,a=gcd(G,L);为什么?因为a与G,L有公因子(当然这时候我还没意识到G=a)
#include<cstdio> int gcd(int a,int b) { return b==0? a: gcd(b,b%a); } int main() { int T; scanf("%d",&T); while(T--) { int G,L; scanf("%d%d",&G,&L); if( L %G !=0) printf("-1\n"); else { int a,b; a=gcd(L,G); b= L/a*G; printf("%d %d\n",a,b); } } return 0; }
新 blog : www.hrwhisper.me