0
点赞
收藏
分享

微信扫一扫

#每日一题 小乐乐与欧几里得

清冷的蓝天天 2022-04-26 阅读 26
c语言

#每日一题
小乐乐与欧几里得

文章目录

一、问题描述:

在这里插入图片描述
链接:添加链接描述

二、最佳解决方案(时间复杂度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、大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数。
为了方便读者理解第二条知识在这里通过作图说明:
当m=20,n=15时.
错误点:1、在这里插入图片描述必须要写成max=m%n的形式,因为被除数不能为零,只有写成max=m%n的形式程序才能正常运行。
2、里面的数据类型要为long long,因为在这里插入图片描述

举报

相关推荐

0 条评论