Project Euler Problem 7を解いてみた

 ループさせてる部分はなるべく単純にしないといけないという反省点を踏まえて。

 最初に書いたのはこんな感じ

prime =[2]
look_number = 2 
ts = Time.now
while prime.length < 10001
  f = 1 
  prime.each do |pr|
    f = 0 if look_number % pr == 0 
  end 
  prime << look_number if f == 1
  look_number += 1
end
p Time.now - ts #=> 468.39512
p prime.pop     #=> 104743

 とっても時間が掛かってしまいました。8分って...。

 よく見ると部分的に無駄があることに気が付いて直すことに。

#f = 0 if look_number % pr == 0

if look_number % pr == 0
  f = 0 
  break
end

掛かった時間は、

p Time.now - ts #=> 468.39512 => 42.448261

1/10以下に!慎重に書かないとダメですね...。