Problem 12
Solution
解いた手順は次の通り。
- 三角数を素因数分解する(factorize)。
- 同じ素因数を数え上げる(count)。
- 約数の個数は同じ素因数の個数がわかっていれば公式的に求まる。約数 - Wikipedia参照。
count = (xs) -> output = {} (output[x] = if output[x] then output[x] + 1 else 1) for x in xs output factorize = (n) -> if n <= 1 return [] res = [] while n % 2 == 0 res.push(2) n /= 2 limit = Math.sqrt(n+1) i = 3 while i <= limit if n % i == 0 res.push(i) n /= i limit = Math.sqrt(n+1) else i += 2 if n != 1 res.push(n) return res triangle_sums = (n*(n+1)/2 for n in [1..20000]) for t in triangle_sums xs = factorize t xs = count(xs) num_of_divisor = 1 (num_of_divisor *= (xs[key] + 1)) for key of xs if num_of_divisor > 500 console.log num_of_divisor console.log t break
順路:CoffeeScriptでProject Euler #13
逆路:CoffeeScriptでProject Euler #11