Problem:
Score : 300 points

Problem Statement

Takahashi is standing on a multiplication table with infinitely many rows and columns.

The square (i,j) contains the integer i \times j. Initially, Takahashi is standing at (1,1).

In one move, he can move from (i,j) to either (i+1,j) or (i,j+1).

Given an integer N, find the minimum number of moves needed to reach a square that contains N.

Constraints

2 \leq N \leq 10^{12}

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the minimum number of moves needed to reach a square that contains the integer N.

Sample Input 1

10

Sample Output 1

5

(2,5) can be reached in five moves. We cannot reach a square that contains 10 in less than five moves.

Sample Input 2

50

Sample Output 2

13

(5, 10) can be reached in 13 moves.

Sample Input 3

10000000019

Sample Output 3

10000000018

Both input and output may be enormous.

Solution in Ruby (2.3.3) (judge verdict: Time Limit Exceeded)

# N

n = gets.chomp.to_i

def eratosthenes_sieve(n)
  check = Array.new(n, false)
  primes = []

  (2..n).each do |i|
    if !check[i]
      primes << i

      (i..n).step(i).each do |j|
        check[j] = true
      end
    end
  end

  primes
end

def prime_factorization(n)
  m = n
  result = []
  primes = eratosthenes_sieve(Math.sqrt(n).ceil)

  while true
    found = false

    primes.each do |pr|
      if m % pr == 0
        result << pr
        found = true
        m = m / pr
        break
      end
    end

    if !found
      result << m if m != 1
      break
    end
  end

  result
end

factors = prime_factorization(n)
c = factors.count
b = 2 ** c - 1

r = []

for i in 0..b
  r1 = 1
  r2 = 1

  for j in 0...c do
    if i[j] == 1
      r1 = r1 * factors[j]
    else
      r2 = r2 * factors[j]
    end
  end

  r << (r1 + r2)
end

puts r.min - 2