#每日一题
小乐乐与欧几里得
一、问题描述:
链接:添加链接描述
二、最佳解决方案(时间复杂度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,因为