ProjectEuler 3 Ruby

#!/usr/bin/ruby

#ans 1
a=600851475143
i=2
while i<a
  a /= i while a%i==0
  i += 1
end
p a

#ans 2
a=600851475143;(2..a).each{|i|i<a or break;a/=i while a%i==0};p a

#ans 3
require "mathn";p 600851475143.prime_division.last[0]