最終更新: 2011-03-12T05:02+0900
後ろの方の問題はしゃれにならない難しさだ。まずもって問題が理解できない。
puts 3*(333*334/2) + 5*(199*200/2) - 15*(66*67/2)
ぐだぐだ考えないで足し合わせていくだけでも良かった気がする。
def even_fibonacci(an_2, an_1) 4*an_1 + an_2 end a = [0, 2] until 4_000_000 < a.last a[0], a[1] = a[1], even_fibonacci(*a) end print a[0] + (a[1] - 3*a[0])/4
案ずるより産むが易し。
n = 600851475143 i = 3 while i*i < n if n%i == 0 print i, " " n = n/i next end i += 2 end print n
12個列挙して一番大きいのを選びました。こんなんでいいのか?
999.downto(900){|p| 999.downto(900){|q| x = (p*q).to_s if x == x.reverse puts "#{x} = #{p}*#{q}" end } }
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 7 2 9 10 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 7 2 3 10 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 7 2 3 11 12 13 14 15 16 17 18 19 20 # 2 3 2 5 7 2 3 11 13 14 15 16 17 18 19 20 # 2 3 2 5 7 2 3 11 13 15 16 17 18 19 20 # 2 3 2 5 7 2 3 11 13 16 17 18 19 20 # 2 3 2 5 7 2 3 11 13 2 17 18 19 20 # 2 3 2 5 7 2 3 11 13 2 17 19 20 # 2 3 2 5 7 2 3 11 13 2 17 19 puts 2*3*2*5*7*2*3*11*13*2*17*19
これでは和の二乗から各数の二乗を素直に引くのと手間が変わらない。
puts (1..100).inject(0){|sum,x| sum += x*(5050-x) }
<追記@2011-03-11>Bignumを使わずに済ませられる効用があったみたい。オーバーフローとか Rubyにはないから気づかなかった。</追記>
力押し。
class Boo def initialize(interval) @interval = interval end def boo?(t) t % @interval == 0 end end a = [] n = 1 loop { n += 2 next if a.any?{|boo| boo.boo?(n) } a.push Boo.new(n) break if 10000 <= a.length } puts n
これはひどい(笑)
#Find 99999 0件 #Find [98]{5} 0件 #Find [987]{5} 3件(99879,79778,98787) print 9*9*8*7*9
後付けで、8×7 > 9×6
なのは確認したけども……。
素直に書き下しただけ。
1.upto(332){|a| aa = a*a b_c = 1000 - a (a+1).upto(b_c/2){|b| c = b_c - b if c*c == aa + b*b puts "#{a} * #{b} * #{c} = #{a*b*c}" exit end } }
10分以上かかっちゃってダメ。