依然要用到均值不等式的知识,证明在这里: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; }
时间: 2024-10-17 11:51:14