# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2012 # require 'mathn' i = 1 triangle_number = 1 while (i = i.next) # i番目の三角数は1 .. iの総和なので triangle_number += i # また整数の約数の個数は素因数分解したときの素因数の指数部+1の総乗であり # それが501以上になる三角数が答え. if (triangle_number.prime_division.reduce(1) {|count, pd| count * (pd[1] + 1)} >= 501) puts triangle_number break end end