Problem 12
三角数の数列は自然数の和で表わされ、7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である。
Problem 12 - PukiWiki
7番目の三角数である28は5つ以上の約数をもつ。
では、501 個以上の約数をもつ最初の三角数はいくらか。
素数の流用がおおいっす。
def prime_number?(num,pl) return false if num < 2 return true if num==2 || num==3|| num==5|| num==7|| num==11|| num==13|| num==17|| num==19|| num==23|| num==29|| num==31|| num==37 return false if num %2==0 ||num%3==0 ||num%5==0 ||num % 7==0||num % 11==0||num % 13==0||num % 17==0||num % 19==0||num % 23==0||num % 29==0||num % 31==0||num % 37==0 r = Math.sqrt(num) pl.each{|j| break if j > r return false if num %j == 0 } return true end def over500?(num) pl=[] p_nl =[] (2..num).each{|i| if num % i == 0 && prime_number?(i,pl) then pl.push(i) k = true counter = 0 while k if num % i == 0 then num = (num/i).to_i and counter +=1 else p_nl.push(counter) and k = false end end break if i > num end } ans =1 p_nl.each{|i| ans = ans * (i+1)} return (ans > 500 ? true : false) end limit = 501 number = Math.sqrt(2 * limit).to_i flag = false while !flag target = (number*(number+1) / 2).to_i number +=1 and next if target < limit over500?(target) ? flag = true : number +=1 end p (number*(number+1) / 2).to_i
答え:76576500