Benchmark - Twin Primes

  • lazy
# Twin primes benchmark

ps = [2]
n = 3
loop do
  if !ps.find{|p| n%p == 0}
    p [ps[-1], n] if ps[-1]+2 == n
    ps << n
  end
  n += 2
end 
  • benchmark
require 'benchmark'

max = 10000
Benchmark.bm do |x|

x.report do
  r = (2..max*2)
  primes = r.inject(r){|p, i| p.select{|n| n==i || n%i!=0}}
  twin_primes = primes.inject([]) do |t, n|
    n+2 == primes[primes.index(n)+1] ? t<<[n,n+2] : t
  end
end

x.report do
  ps = [2]
  n = 3
  twin_primes = []
  max.times do
    if !ps.find{|p| n%p == 0}
      twin_primes << [ps[-1], n] if ps[-1]+2 == n
      ps << n
    end
    n += 2
  end 
end

end

=begin
      user     system      total        real
 61.508000   0.150000  61.658000 ( 65.320000)
  4.507000   0.000000   4.507000 (  4.817000)
=end