本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
个人思路:
相信大家都会用辗转相除法计算两个数的最大公约数,但是在这里我们可以用一行代码实现它,对于最小公倍数,我们可以让两个数中的小数加倍不断变大,直到符合为止。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
return b? gcd(b,a%b):a;
}
int low(int a,int b){
if(a<b){
for(int i=2;;i++){
if(i*a % b == 0) return i*a;
}
}else return low(b,a);
}
int main(){
int n,m;
cin>>n>>m;
cout<<gcd(n,m)<<" "<<low(n,m);
}