题目重述
从标准输入设备读入两个正整数,求两数的最大公约数与最小公倍数。
Standard Input
有多组测试数据。输入的第一行是整数T(0<T≤100),表示测试数据的组数。每一组测试数据只有一行,分别为整数a和b,两数之间有一个空格。0<a,b≤32767。
Standard Output
对应每组输入,输出一行对应两数的最大公约数和最小公倍数,两数之间用一个空格隔开。
直接用循环的思路写代码一定会被这道题卡下来,所以选择算法最优的方式写:
最大公约数------辗转相除法
最小公倍数------乘积/最大公约数
#include<bits/stdc++.h>
using namespace std;
int main(){
int T,a,b,t,k;
cin>>T;
while(T--){
cin>>a>>b;
int x=a*b;
if(a<b){
t=a;
a=b;
b=t;
}
do{
k=a%b;
a=b;
b=k;
}while(k);
//cout<<x<<endl;
cout<<a<<" "<<(x/a)<<endl;
}
return 0;
}