Witam
Piszę funkcję, której zadaniem jest znalezienie minimalnego obwodu prostokąta przy danym polu. Kod poniżej.
typedef unsigned long long ull;
ull minimum_perimeter(ull area) {
double a,b;
for(a = floor(sqrt(area)),b = ceil(sqrt(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);
}
Niestety program nie przechodzi mi testów z powodu przekroczenia czasu wykonania.
1 <= area <= 5 x 10 ^ 10
taką wartość może przyjąc parametr area.
Mógłby ktoś podpowiedzieć, jak poprawić kod.