Я пытаюсь решить задачу №12 проекта Эйлера:
Последовательность чисел треугольника генерируется путем сложения натуральных числа. Итак, 7-е число треугольника будет 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Первые десять условий будут:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Перечислим множители первых семи чисел треугольника:
1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28
Мы видим, что 28 - первое число в треугольнике, у которого больше пяти делители. Какое значение имеет первое число треугольника, чтобы было больше пяти сто делителей?
Вот решение, которое я придумал с помощью Ruby:
triangle_number = 1
(2..9_999_999_999_999_999).each do |i|
triangle_number += i
num_divisors = 2 # 1 and the number divide the number always so we don't iterate over the entire sequence
(2..( i/2 + 1 )).each do |j|
num_divisors += 1 if i % j == 0
end
if num_divisors == 500 then
puts i
break
end
end
Я не должен использовать произвольное огромное число, например 9_999_999_999_999_999. Было бы лучше, если бы у нас была последовательность Math.INFINITY, как в некоторых функциональных языках. Как я могу сгенерировать ленивую бесконечную последовательность в Ruby?