random4.rb


適当なランダムな数字が欲しいときがあります。で、適当に考えると自分の誕生日だったり、3で割り切れたり、ちっともランダムでないので、4つほど候補を挙げてくれるプログラム。せっかくだから素数にしました。
\> ruby random4.rb
とすると、
[53, 479, 4549, 6113]
というように、素数の配列を返してくれます。

#! /usr/bin/env ruby
# random4.rb -- produces 4 random but prime numbers

def primes_up_to(n) # calculate all the primes up to the number
  r = (2..n).to_a # convert to an array
  primes =
  while r.first**2 < n # up to square root
    primes.push(r.first)
    r.reject! { |i| i % primes.last == 0} # sieve
  end
  primes + r # the rest are primes
end

def random4(n)
  primes = primes_up_to(n)
  random4 = 
  while random4.size < 4
     random4[random4.size] = primes[rand(primes.size)]
     random4.uniq!
   end
   
  return random4.sort!
end

if $0 == __FILE__
 p random4(10000)
end

# => [53, 479, 4549, 6113]