列表

详情


BC44. 小乐乐与欧几里得

描述

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例1

输入:

10 20

输出:

30

示例2

输入:

15 20

输出:

65

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 344KB, 提交时间: 2021-09-09

#include <stdio.h>
int main(){
    long long a,b,m,n,c;
    scanf("%lld %lld",&a,&b);
    c=a*b;
    while(a&&b){
        if(a>b) a%=b;
        else b%=a;
    }
    m=a>b?a:b;
    printf("%lld\n",m+c/m);
}

C 解法, 执行用时: 1ms, 内存消耗: 352KB, 提交时间: 2021-07-27

long long sum(long long n,long long m)
{
    long long tmp1 = m*n;
    if(n<m)
    {
        long long tmp = n;
        n = m;
        m = tmp;
    }
    while(n%m!=0)
    {
        long long a;
        a = n%m;
        n = m;
        m = a;
    }
    long long x = tmp1/m;
    return x+m;
}
int main()
{
    long long n,m;
    scanf("%lld%lld",&n,&m);
    printf("%lld",sum(n,m));
}

C 解法, 执行用时: 1ms, 内存消耗: 356KB, 提交时间: 2021-10-17

int main()
{
    long long n = 0;
    long long m = 0;
    long long tmp = 0;
    
    scanf("%lld %lld", &n, &m);
    int a = n;
    int b = m;
    while(tmp=a%b)
   {
        a = b;
        b = tmp;
   }
    printf("%lld\n", b+m*n/b);
    return 0; 
}

C 解法, 执行用时: 1ms, 内存消耗: 356KB, 提交时间: 2021-07-26

#include <stdio.h>
#include <stdio.h>
int main()
{
        long n, m;
        scanf("%ld %ld", &n, &m);
        long a1 = n, a2 = m;
        while (a1&&a2){
            if (a1>a2)
                a1 %= a2;
            else
                a2 %= a1;
        }
        a1 = a1 == 0 ? a2 : a1;
        printf("%ld\n", a1 + (n*m)/a1);
        return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2021-05-02

#include <stdio.h>

int main()
{
    long int n,m,tmp,n_tmp,m_tmp;
    scanf("%ld %ld",&n,&m);
    n_tmp = n;
    m_tmp = m;
    while(m)
    {
        tmp = n%m;
        n   = m;
        m   = tmp;
    }
    printf("%ld",n+(m_tmp*n_tmp)/n);
    return 0;
}

上一题