51Nod_1283 最小周长
http://www.51nod.com/Challenge/Problem.html#!#problemId=1283
题目
一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值。例如:S = 24,那么有{1 24} {2 12} {3 8} {4 6}这4种矩形,其中{4 6}的周长最小,为20。
输入
输入1个数S(1 <= S <= 10^9)。
输出
输出最小周长。
样例输入
24
样例输出
20
分析
a*b=s则a+b>=2*sqrt(s)当a=b时等号成立。由于a和b都为整数所以当s是平方数时,a+b最小取2*sqrt(s)。当s不是平方数时就要选取靠近sqrt(s)的整数
C++程序
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long s;
cin>>s;
int e=sqrt(s);
int c1=0,c2=0,i=e;
while(s%i!=0)
i++;
if(i!=s)
c1=2*(i+s/i);
i=e;
while(s%i!=0)
i--;
c2=2*(i+s/i);
if(c1<c2&&c1)
cout<<c1<<endl;
else
cout<<c2<<endl;
return 0;
}