小学奥数 最大公约数与最小公倍数

依然要用到均值不等式的知识,证明在这里:http://www.cnblogs.com/xtx1999/p/4913067.html

因为知道了两个数的最大公约数和最小公倍数,于是就知道了两个数的乘积。根据均值不等式,两个数和一定两数和一定,它们两个越接近乘积越大。所以乘积一定时,它们越接近和就越小所以枚举即可。

#include<iostream>
#include<cstdio>
using namespace std;
int gcd,lcm,a,b,tot,ans=10000000;
inline int Gcd(int x,int y)
{
    return y==0?x:Gcd(y,x%y);
}
int main()
{
    scanf("%d%d",&gcd,&lcm);
    tot=gcd*lcm;
    for(int i=1;i*i<=tot;i++)
      if(tot%i==0&&Gcd(i,tot/i)==gcd)
          ans=min(ans,i+tot/i);
    cout<<ans;
}

原文地址:https://www.cnblogs.com/xtx1999/p/4913070.html