Skip to content

Instantly share code, notes, and snippets.

@chischaschos
Last active January 1, 2016 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chischaschos/8203496 to your computer and use it in GitHub Desktop.
Save chischaschos/8203496 to your computer and use it in GitHub Desktop.
require 'ruby-prof'
def prime(n)
limit = n
numbers = Array.new(n + 1) { true }
start = 2
primes = []
loop do
numbers[start] && primes << start
cross_multiples start, numbers
start = next_bigger_than start, numbers
start > limit && break
end
primes
end
def cross_multiples number, numbers
next_to_cross = number + number
loop do
numbers[next_to_cross].nil? && break
numbers[next_to_cross] && numbers[next_to_cross] = false
next_to_cross += number
end
end
def next_bigger_than number, numbers
increment = 1
next_bigger = number + increment
loop do
if numbers[next_bigger] || numbers[next_bigger].nil?
break
else
next_bigger += 1
end
end
next_bigger
end
RubyProf.start
p prime 1_000_000
result = RubyProf.stop
printer = RubyProf::FlatPrinter.new result
printer.print STDOUT
➜ katas ruby primes.rb
Thread ID: 70312662476500
Fiber ID: 70312668298920
Total: 16.014233
Sort by: self_time
%self total self wait child calls name
16.57 2.654 2.654 0.000 0.000 3696711 Kernel#nil?
3.88 0.621 0.621 0.000 0.000 1 Array#initialize
3.44 0.550 0.550 0.000 0.000 921501 Array#[]=
3.12 15.393 0.500 0.000 14.893 156997 *Kernel#loop
2.68 4.218 0.429 0.000 3.789 78498 Object#next_bigger_than
1.86 10.675 0.298 0.000 10.377 78498 Object#cross_multiples
0.60 0.097 0.097 0.000 0.000 78499 NilClass#nil?
0.00 16.014 0.000 0.000 16.014 1 Global#[No method]
0.00 16.014 0.000 0.000 16.014 1 Object#prime
0.00 0.621 0.000 0.000 0.621 1 Class#new
* indicates recursively called methods
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment