题解 | #小乐乐与欧几里得#

小乐乐与欧几里得

https://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0

#include <stdio.h>
// long long get_max_y(long long n, long long m, long long max)
// {
//     return n % max == 0 && m % max == 0 ? max : get_max_y(n, m, max - 1);
// }
//第一次写的  取两个数最小值当作最大公约数,如果不是的话一个一个减,提交结果就是如果数值太大超出时间限制
long long gcd(long long n,long long m){
    return m==0? n:gcd(m,n%m) ;
}
//第二次写的  用的辗转相除法,也叫欧几里得算法:
//设两数为a和b(a>b),用a除以b,得a÷b=q......r,若r=0 ,则最大公约数为b;若r≠0 ,则再用b÷r,得b÷r=q......r',若r'=0,则最大公约数为r',若r'≠0,则继续用r÷r'......直到能够整除为止,此时的除数即为最大公约数。
int main() {
    long long n, m;
    long long min_b, max_y;
    scanf("%lld %lld", &n, &m);
    // long long max = m > n ? n : m;
    // max_y = get_max_y(n, m, max);第一次写的
    max_y = gcd(n, m);
    min_b = m * n / max_y;
    printf("%lld",max_y+min_b);
    return 0;
}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务