#每日一题
 小乐乐与欧几里得
 
文章目录
一、问题描述:

 链接:添加链接描述
二、最佳解决方案(时间复杂度O(logN))
#include<stdio.h>
int main()
{
    long long n,m;
    scanf("%lld %lld",&n,&m);
    long long ret=n*m;
    //确保m为较大数
    if(n>m)
    {
       long long tmp=m;
        m=n;
        n=tmp;
    }
    long long max;
    //最大公约数
    while(max=m%n)
    {
        m=n;
        n=max;
    }
    //最小公倍数
    m=ret/n;
    printf("%lld\n",n+m);
    return 0;
}
 
分析
核心知识:
 1、mn=最大公约数最小公倍数
 2、大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数。
 为了方便读者理解第二条知识在这里通过作图说明:
 
 错误点:1、
必须要写成max=m%n的形式,因为被除数不能为零,只有写成max=m%n的形式程序才能正常运行。
 2、里面的数据类型要为long long,因为










