require 'prime' n = gets.strip.to_i primes = [] primes << 2 i = 3 while i < n primes << i if i.prime? i += 2 end # p primes.length @memo = Hash.new(0) @memo_next = Hash.new(0) primes.each do |prime| @memo = @memo_next.clone @memo.each do |k, v| if k != n && k + prime > n @memo_next.delete(k) next end next if k + prime != n && k + 2 * prime > n @memo_next[k + prime] = [@memo[k + prime], v + 1].max #print "#{prime} #{@memo_next}\n" end @memo_next[prime] = [1, @memo[prime]].max #@memo = @memo_next end if @memo_next.key?(n) p @memo_next[n] else puts -1 end