I changed the Miller-Rabin in the gist to a shorter/faster/adjustable
version which I modified a little.  Here's the new code in the gist.
------------------------------------------------------------------------

class Integer

   # Miller-Rabin prime test in Ruby
   # From: http://en.wikipedia.org/wiki/Miller-Rabin_primality_test
   # Ruby Rosetta Code:
http://rosettacode.org/wiki/Miller-Rabin_primality_test
   # I modified the Rosetta Code, as shown below

   require 'openssl'

   def primemr?(k=20) # increase k for more reliability
     n = self.abs
     return true  if n == 2 or n == 3
     return false if n % 6 != 1 && n % 6 != 5 or n == 1

     d = n - 1
     s = 0
     (d >>= 1; s += 1) while d & 1 == 0  # while d even
     k.times do
       a = 2 + rand(n-4)
       x = OpenSSL::BN::new(a.to_s).mod_exp(d,n)   #x = (a**d) % n
       next if x == 1 or x == n-1
       (s-1).times do
         x = x.mod_exp(2,n)                        #x = (x**2) % n
         return false if x == 1
         break if x == n-1
       end
       return false if x != n-1
     end
     true  # probably
   end
end

-- 
Posted via http://www.ruby-forum.com/.