I have a friend who is really into Pi. In fact he claims to have the first 200 digits memorized.Me I think primes are way cooler, first of all there are a lot of them, and they occur more than you think.

For instance 2,000,000,000,003 is a prime number!

Anyway below is a script I wrote which can be used to determine is a number is a prime or you can just run it and it will start printing out all of the primes starting with the number 2.

ruby primes.rb -h Usage: primes.rb [ -c ] or [ -o integer] -c calculate primes -o, --one_integer integer check if one integer is a prime -h Display this screen example: primes -c calculate all primes starting with the number 2 example: primes -o check if a given integer is a prime

The code:

require 'optparse' require 'rubygems' ########### # methods # ########### def primes(start) foo = 2 out = Array.new root = Math.sqrt(start) div = root.to_i while foo <= div foo = foo + 1 ans = start.to_f / foo.to_f nu,de = ans.to_s.split('.') if de == "0" out.push(de) end end return out end ################## # define options # ################## options = {} optparse = OptionParser.new do|opts| opts.banner = "Usage: primes.rb [ -c ] or [ -o integer]" options[:calculate_primes] = false opts.on( '-c', 'calculate primes' ) do options[:calculate_primes] = true end options[:one_integer] = nil opts.on( '-o integer', '--one_integer integer', "check if one integer is a prime" ) do |check_this| options[:one_integer] = check_this end opts.on( '-h', 'Display this screen' ) do puts opts puts "example: primes -c calculate all primes starting with the number 2" puts "example: primes -o check if a given integer is a prime" exit end optlength = ARGV.length if optlength < 1 puts opts.banner exit end end optparse.parse! if options[:calculate_primes] start = 2 while start > 1 start = start +1 if start.odd? out = primes(start) count = out.count if count == 0 puts start.to_s end end end end if options[:one_integer] check_this = "#{options[:one_integer]}" if check_this.to_i.even? puts check_this.to_s + " is not a prime number" exit end out = primes(check_this) count = out.count if count == 0 puts check_this.to_s + " is a prime number" else puts check_this.to_s + " is not a prime number" end end

**Update:**Turns out Ruby has a built in function to do this in 3 lines.

require 'mathn' list_primes = Prime.new puts list_primes.each { |prime| print prime.to_s + "n", " "; break unless prime > 1 }

Thank you mathn!

Advertisements