upto = 20
def prime? x
(2..x-1).each { |y| return false if x % y == 0 }
true
end
# For speed reasons we want to find max possible increment
def increment upto
a = 1
(1..upto).each { |x| a*= x if prime? x }
a
end
def no_remainder? x, upto
(1..upto).each { |y| return false if x % y != 0 }
true
end
increment = increment upto
x = increment
try_number = 1
while true
if no_remainder? x, upto
puts "The smallest number is #{x}"
break
end
try_number += 1
x = try_number * increment
end
dXB0byA9IDIwCgpkZWYgcHJpbWU/IHgKICAoMi4ueC0xKS5lYWNoIHsgfHl8IHJldHVybiBmYWxzZSBpZiB4ICUgeSA9PSAwIH0KICB0cnVlCmVuZAoKIyBGb3Igc3BlZWQgcmVhc29ucyB3ZSB3YW50IHRvIGZpbmQgbWF4IHBvc3NpYmxlIGluY3JlbWVudApkZWYgaW5jcmVtZW50IHVwdG8KICBhID0gMQogICgxLi51cHRvKS5lYWNoIHsgfHh8IGEqPSB4IGlmIHByaW1lPyB4IH0KICBhCmVuZAoKZGVmIG5vX3JlbWFpbmRlcj8geCwgdXB0bwkKICAoMS4udXB0bykuZWFjaCB7IHx5fCByZXR1cm4gZmFsc2UgaWYgeCAlIHkgIT0gMCB9CiAgdHJ1ZQplbmQKCmluY3JlbWVudCA9IGluY3JlbWVudCB1cHRvCnggPSBpbmNyZW1lbnQKdHJ5X251bWJlciA9IDEKCndoaWxlIHRydWUKICBpZiBub19yZW1haW5kZXI/IHgsIHVwdG8KICAgIHB1dHMgIlRoZSBzbWFsbGVzdCBudW1iZXIgaXMgI3t4fSIKICAgIGJyZWFrCiAgZW5kCiAgdHJ5X251bWJlciArPSAxCiAgeCA9IHRyeV9udW1iZXIgKiBpbmNyZW1lbnQgCmVuZAo=