7-1 最大公约数和最小公倍数分数 15作者 张彤彧单位 浙江大学

308 阅读1分钟

 

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数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);
}