Project Eulerの問題#12を解決しようとしています:
三角形の数列は、自然数を加算することによって生成されます。したがって、7 番目の三角形の数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 になります。最初の 10 項は次のようになります。
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
最初の 7 つの三角形の数の因数を挙げてみましょう。
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 は、約数が 5 を超える最初の三角形の数であることがわかります。約数が 500 を超える最初の三角形の数の値は?
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で遅延無限シーケンスを生成するにはどうすればよいですか?