Piszę funkcję, której zadaniem jest znalezienie minimalnego obwodu prostokąta, przy zadanym polu. Długość i szerokość muszą być różnymi wartościami całkowitymi, tzn. że nie można tego policzyć wyciągając pierwiastek kwadratowy z pola. Poniżej kod.
Kod: Zaznacz cały
typedef unsigned long long ull;
ull minimum_perimeter(ull area) {
long double a,b;
for(a = floor(sqrtl(area)),b = ceil(sqrtl(area));a*b!=area;a--)
{
ull b_b=b;
for(;a*b_b<area;b_b++);
if(a*b_b==area)
return 2*(a+b_b);
}
return 2*(a+b);
}