# MinPerimeterRectangle

The perimeter is the smallest when the difference between the both sides is minimal. So we are going to find the highest possible numberÂ whose square is less than N.

Dont forget to check for integers, and for perfect squares.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function solution(N) { var min_per = 0, i = 1; while( i * i < N){ if(N % i === 0){ min_per = 2 * ( N / i + i ); } i++; } if( i * i === N){ min_per = 4 * i; } return min_per; } |

An integer N is given, representing the area of some rectangle.

The area of a rectangle whose sides are of length A and B is A * B, and the perimeter is 2 * (A + B).

The goal is to find the minimal perimeter of any rectangle whose area equals N. The sides of this rectangle should be only integers.

For example, given integer N = 30, rectangles of area 30 are:

(1, 30), with a perimeter of 62,

(2, 15), with a perimeter of 34,

(3, 10), with a perimeter of 26,

(5, 6), with a perimeter of 22.

Write a function:

function solution(N);

that, given an integer N, returns the minimal perimeter of any rectangle whose area is exactly equal to N.

For example, given an integer N = 30, the function should return 22, as explained above.

Assume that:

N is an integer within the range [1..1,000,000,000].

Complexity:

expected worst-case time complexity is O(sqrt(N));

expected worst-case space complexity is O(1).