#!/bin/ruby #require 'pry' def getDivisors(n) divisors = [] i = 1 while i <= n if n % i == 0 divisors.push(i) end i += 1 end divisors end def getMoves(item) if item[:units] == 1 #binding.pry return item[:pieces] + item[:moves] end high = 0 queue = [] divs = getDivisors(item[:units]) divs.shift() divs.each do |d| queue.push({pieces: d * item[:pieces], units: item[:units] / d, moves: item[:moves] + item[:pieces]}) end #binding.pry queue.each do |q| #binding.pry result = getMoves(q) if result > high high = result end end return high end def longestSequence(a) # Return the length of the longest possible sequence of moves. total = 0 a.each do |num| total += getMoves({pieces: 1, units: num, moves: 0}) end total end n = gets.strip.to_i a = gets.strip a = a.split(' ').map(&:to_i) result = longestSequence(a) puts result