数论 UVA 11388

时间:2023-03-08 16:28:52

这道题是关于两个数的最大公约数和最小公倍数的题目。给你两个数字g,l,分别表示最大公约数和最小公倍数。要求你找到两个数a,b,要求这两个数的最大公约数和最小公倍数为所给的两个数。如果存在多组数字符合这一条件,

就输出a最小的那一组数字。由最大公约数和最小公倍数与两个数的关系可得,a*b=l*g,g<=a,b<=l,a%g==b%g==0,l%a==l%b==0。则所要求的a最小的那组数据,其实就是当a==g时所求出的那组数据。

#include <stdio.h>
#include <stdlib.h> int main()
{
int g,l,t;
scanf("%d",&t);
while(t--)
{
int x;
scanf("%d%d",&g,&l);
if(g>l)
{
x=g;
g=l;
l=x;
}
int a,b;
if(l%g==0)
{
a=g;
b=l;
printf("%d %d\n",a,b);
}
else
printf("-1\n");
}
return 0;
}