Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [kilk@klkpc ruby_small]$ rb comp.rb
- Elapsed time for Brute Force : 5.804927 Primes = 78498
- Elapsed time for Sieve of Eratosthenes: 0.482605 Primes = 78498
- Elapsed time for Sieve of Sundaram : 0.650439 Primes = 78498
- [kilk@klkpc crystal]$ bin/crystal test1.cr --run
- Elapsed time for Brute Force : 0.327009 Primes = 78498
- Elapsed time for Sieve of Eratosthenes: 0.0609334 Primes = 78498
- Elapsed time for Sieve of Sundaram : 0.0452578 Primes = 78498
- def bruteForce(topCandidate)
- totalCount = 1
- isPrime = true
- 3.step(topCandidate, 2) do |i|
- j=3
- while j*j <= i && isPrime
- isPrime = false if i%j==0
- j += 2
- end
- isPrime ? (totalCount += 1) : (isPrime = true)
- end
- totalCount
- end
- def sieveOfEratosthenes(topCandidate)
- myBA1 = Array.new(topCandidate + 1) {true}
- myBA1[0] = myBA1[1] = false
- thisFactor = 2
- while thisFactor * thisFactor <= topCandidate
- mark = thisFactor + thisFactor
- mark.step(topCandidate, thisFactor) {|n| myBA1[n] = false}
- thisFactor += 1
- while (!myBA1[thisFactor])
- thisFactor += 1
- end
- end
- myBA1.count(true)
- end
- def sieveOfSundaram(topCandidate)
- k = topCandidate / 2
- myBA1 = Array.new(k + 1) {true}
- myBA1[0] = myBA1[k] = false
- (1..k).each do |i|
- denominator = (i << 1) + 1
- maxVal = (k - i) / denominator
- i.step(maxVal, 1) {|n| myBA1[i + n * denominator] = false}
- # this version takes .20 seconds longer to run 1M iterations!
- # for n in i..maxVal+1 do
- # myBA1[i + n * denominator] = false
- # end
- end
- myBA1.count(true) + 1
- end
- def main
- max = 1000000
- startTime = Time.now()
- primes = bruteForce(max)
- elapsed = Time.now() - startTime
- puts("Elapsed time for Brute Force : #{elapsed} Primes = #{primes}")
- startTime = Time.now()
- primes = sieveOfEratosthenes(max)
- endTime = Time.now()
- elapsed = endTime - startTime
- puts("Elapsed time for Sieve of Eratosthenes: #{elapsed} Primes = #{primes}")
- startTime = Time.now()
- primes = sieveOfSundaram(max)
- endTime = Time.now()
- elapsed = endTime - startTime
- puts("Elapsed time for Sieve of Sundaram : #{elapsed} Primes = #{primes}")
- end
- main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement