def f(n) (n/2).downto(2){|i| yield i if n%i<1} end f(ARGV[0].to_i){|i| begin; f(i){raise}; rescue; next; end puts "#{i} is the largest prime factor of #{ARGV[0]}" exit 0 }