<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: math code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 08:04:34 GMT</pubDate>
    <description>DZone Snippets: math code</description>
    <item>
      <title>Bit field class</title>
      <link>http://snippets.dzone.com/posts/show/5495</link>
      <description>// A bit field is an important data structure in computer science, major uses include memory allocators and Bloom filters.&lt;br /&gt;// The code is in the form of a header file and an implementation file.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;bitfield.h&gt;&lt;br /&gt;// This class is a code snippet, it can be freely used and distributed.&lt;br /&gt;// Author: irfan[dot]hamid[at]gmail[dot]com&lt;br /&gt;//&lt;br /&gt;// Bit fields are a widely used mechanism in computing applications.&lt;br /&gt;// Typical applications include memory allocators and Bloom filters. This class&lt;br /&gt;// provides a generic bit field implementation for an arbitrary number of bits.&lt;br /&gt;//&lt;br /&gt;// Implementation notes:&lt;br /&gt;// The use of C++ allows the clean separation of the data structure from the&lt;br /&gt;// interface. The bit field is implemented as a vector of unsigned int that is&lt;br /&gt;// allocated at object creation.&lt;br /&gt;//&lt;br /&gt;// field: The vector that represents the bit field itself&lt;br /&gt;// bit_count: The total number of bits in the bit field&lt;br /&gt;&lt;br /&gt;#ifndef __BITFIELD_H__&lt;br /&gt;#define __BITFIELD_H__&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;#define SZ_UINT sizeof(unsigned int)&lt;br /&gt;&lt;br /&gt;class Bitfield&lt;br /&gt;{&lt;br /&gt;protected:&lt;br /&gt;	unsigned int *field;&lt;br /&gt;	unsigned int bit_count;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;	Bitfield (int bc);&lt;br /&gt;	~Bitfield ();&lt;br /&gt;&lt;br /&gt;	int set (int bit);&lt;br /&gt;	int get (int bit);&lt;br /&gt;	int reset (int bit);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;/bitfield.h&gt;&lt;br /&gt;&lt;br /&gt;&lt;bitfield.cpp&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include "bitfield.h"&lt;br /&gt;&lt;br /&gt;// The constructor takes an int param which gives the number of bits in this&lt;br /&gt;// bit field.&lt;br /&gt;Bitfield::Bitfield (int bc)&lt;br /&gt;{&lt;br /&gt;	bit_count = bc;&lt;br /&gt;&lt;br /&gt;	// E.g, ceil(257/32*8) = 65, 64 ints fully used, last one partially used&lt;br /&gt;	field = (unsigned int*) malloc(((int) ceil(bc/SZ_UINT*8)));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bitfield::~Bitfield ()&lt;br /&gt;{&lt;br /&gt;	if (field)&lt;br /&gt;		free(field);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// This function sets the corresponding bit in the field equal to 1.&lt;br /&gt;//&lt;br /&gt;// Returns: 0 on success, -1 on error.&lt;br /&gt;int Bitfield::set (int bit)&lt;br /&gt;{&lt;br /&gt;	// Sanity check&lt;br /&gt;	if (bit &gt;= bit_count || !field)&lt;br /&gt;		return -1;&lt;br /&gt;&lt;br /&gt;	// The correct index into the vector will be given by bit/SZ_UNIT. The&lt;br /&gt;	// index into the correct vector element is given by bit%SZ_UNIT, to&lt;br /&gt;	// achieve this, simply left shift 0x01 the appropriate number of times.&lt;br /&gt;	field[bit/SZ_UINT] |= (0x00000001 &lt;&lt; (bit%(SZ_UINT*8)-1));&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// This function sets the corresponding bit in the field equal to 0.&lt;br /&gt;//&lt;br /&gt;// Returns: 0 on success, -1 on error.&lt;br /&gt;int Bitfield::reset (int bit)&lt;br /&gt;{&lt;br /&gt;	if (bit &gt;= bit_count || !field)&lt;br /&gt;		return -1;&lt;br /&gt;	field[bit/SZ_UINT] &amp;= ~(0x00000001 &lt;&lt; (bit%(SZ_UINT*8)-1));&lt;br /&gt;	return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// This function returns the value of the corresponding bit.&lt;br /&gt;//&lt;br /&gt;// Returns: The value of the bit, if the field is initialized and bit index is&lt;br /&gt;// within bounds, -1 otherwise.&lt;br /&gt;int Bitfield::get (int bit)&lt;br /&gt;{&lt;br /&gt;	if (bit &gt;= bit_count || !field)&lt;br /&gt;		return -1;&lt;br /&gt;	return (field[bit/SZ_UINT] &amp; (0x00000001 &lt;&lt; (bit%(SZ_UINT*8)-1)) ? 1 : 0);&lt;br /&gt;}&lt;br /&gt;&lt;/bitfield.cpp&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 May 2008 11:48:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5495</guid>
      <author>phaana (Irfan Hamid)</author>
    </item>
    <item>
      <title>Calculate Pi</title>
      <link>http://snippets.dzone.com/posts/show/5433</link>
      <description>This script presents a way to compute Pi using a statistic method.&lt;br /&gt;See http://en.wikipedia.org/wiki/Computing_&#960; for further algorithms.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import random, math&lt;br /&gt;&lt;br /&gt;class calcPi:&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.times = pow(10,6)&lt;br /&gt;        self.i = 0&lt;br /&gt;        self.isnot = 0&lt;br /&gt;&lt;br /&gt;    def IsOnCircle(self,x,y):&lt;br /&gt;        if math.sqrt(x**2+y**2) &lt; 1:&lt;br /&gt;            return True&lt;br /&gt;        else:&lt;br /&gt;            return False&lt;br /&gt;    &lt;br /&gt;    def run(self):&lt;br /&gt;        for x in range(self.times):&lt;br /&gt;            x,y = random.random(),random.random()&lt;br /&gt;            if self.IsOnCircle(x,y):&lt;br /&gt;                self.i+=1&lt;br /&gt;            else:&lt;br /&gt;                self.isnot+=1&lt;br /&gt;    &lt;br /&gt;    def getResults(self):&lt;br /&gt;        return (float(self.i), float(self.isnot))&lt;br /&gt;&lt;br /&gt;    def getPi(self):&lt;br /&gt;        self.run()&lt;br /&gt;        r = self.getResults()&lt;br /&gt;        return r[0]/(r[0]+r[1])*4&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    print calcPi().getPi()&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 26 Apr 2008 14:57:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5433</guid>
      <author>jakob ()</author>
    </item>
    <item>
      <title>First n primes in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/5380</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;#!/usr/local/bin/ruby -w&lt;br /&gt;&lt;br /&gt;require 'benchmark' &lt;br /&gt;&lt;br /&gt;class Integer    &lt;br /&gt;   def prime?         # cf. http://snippets.dzone.com/posts/show/4636&lt;br /&gt;     n = self.abs()&lt;br /&gt;     return true if n == 2&lt;br /&gt;     return false if n == 1 || n &amp; 1 == 0&lt;br /&gt;     d = n-1&lt;br /&gt;     d &gt;&gt;= 1 while d &amp; 1 == 0&lt;br /&gt;     20.times do                               # 20 = k from above&lt;br /&gt;       a = rand(n-2) + 1&lt;br /&gt;       t = d&lt;br /&gt;       y = ModMath.pow(a,t,n)                  # implemented below&lt;br /&gt;       while t != n-1 &amp;&amp; y != 1 &amp;&amp; y != n-1&lt;br /&gt;         y = (y * y) % n&lt;br /&gt;         t &lt;&lt;= 1&lt;br /&gt;       end&lt;br /&gt;       return false if y != n-1 &amp;&amp; t &amp; 1 == 0&lt;br /&gt;     end&lt;br /&gt;     return true&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt; &lt;br /&gt;module ModMath&lt;br /&gt;   def ModMath.pow(base, power, mod)&lt;br /&gt;     result = 1&lt;br /&gt;     while power &gt; 0&lt;br /&gt;       result = (result * base) % mod if power &amp; 1 == 1&lt;br /&gt;       base = (base * base) % mod&lt;br /&gt;       power &gt;&gt;= 1;&lt;br /&gt;     end&lt;br /&gt;     result&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;&lt;br /&gt;   def primes   # cf. http://snippets.dzone.com/posts/show/3734&lt;br /&gt;&lt;br /&gt;      sieve = []&lt;br /&gt;      3.step(self, 2) { |i| sieve[i] = i }&lt;br /&gt;      sieve[1] = nil&lt;br /&gt;      sieve[2] = 2&lt;br /&gt;&lt;br /&gt;      3.step(Math.sqrt(self).floor, 2) do |i| &lt;br /&gt;         next unless sieve[i]&lt;br /&gt;         (i*i).step(self, i) do |j|&lt;br /&gt;            sieve[j] = nil&lt;br /&gt;         end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      sieve.compact!&lt;br /&gt;&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def primes2       # cf. http://snippets.dzone.com/posts/show/3734&lt;br /&gt;&lt;br /&gt;      primes = [nil, nil].concat((2..self).to_a)&lt;br /&gt;&lt;br /&gt;      (2 .. Math.sqrt(self)).each do |i|&lt;br /&gt;         next unless primes[i]&lt;br /&gt;            (i*i).step(self, i) do |j|&lt;br /&gt;               primes[j] = nil&lt;br /&gt;            end&lt;br /&gt;      end&lt;br /&gt;	&lt;br /&gt;      primes.compact!&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;&lt;br /&gt;   @primes_cache ||= 100.primes&lt;br /&gt;   #@primes_cache ||= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]&lt;br /&gt;   class &lt;&lt; self; attr_accessor :primes_cache; end&lt;br /&gt;&lt;br /&gt;   @nthprime_limit ||= 5_000_000&lt;br /&gt;   class &lt;&lt; self; attr_reader :nthprime_limit; end&lt;br /&gt;   #class &lt;&lt; self; attr_accessor :nthprime_limit; end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def sieve_size&lt;br /&gt;      num = self.to_i.abs&lt;br /&gt;      logn = Math.log(num)&lt;br /&gt;      if num &lt; 15985     # cf. http://primes.utm.edu/howmany.shtml&lt;br /&gt;         ( num * (logn + Math.log(logn) - 1 + 1.8 * Math.log(logn) / logn) ).floor&lt;br /&gt;      else&lt;br /&gt;         ( num * (logn + Math.log(logn) - 0.9427) ).floor&lt;br /&gt;      end&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def nthprime&lt;br /&gt;&lt;br /&gt;      num = self.to_i.abs&lt;br /&gt;&lt;br /&gt;      # set a limit; cf. http://primes.utm.edu/nthprime/: The 5,000,000th prime is 86,028,121.&lt;br /&gt;      raise "#{num}: number too big for Integer#nthprime" if num &gt; Integer.nthprime_limit      &lt;br /&gt;&lt;br /&gt;      primes_cache_size = Integer.primes_cache.size&lt;br /&gt;&lt;br /&gt;      if num &gt; primes_cache_size&lt;br /&gt;&lt;br /&gt;         # optional; cf. Integer#nthprime_add and Integer#nthprime_add_mr below&lt;br /&gt;         if num &gt;= 50_000 &amp;&amp; num &lt; 100_000 &amp;&amp; (num - primes_cache_size) &lt; 5000 then return num.nthprime_add end&lt;br /&gt;         if num &gt;= 100_000 &amp;&amp; num &lt; 200_000 &amp;&amp; (num - primes_cache_size) &lt; 15000 then return num.nthprime_add end&lt;br /&gt;         if num &gt;= 200_000 &amp;&amp; (num - primes_cache_size) &lt; 35000 then return num.nthprime_add end&lt;br /&gt;         &lt;br /&gt;         logn = Math.log(num)&lt;br /&gt;&lt;br /&gt;         if num &lt; 15985       # cf. http://primes.utm.edu/howmany.shtml&lt;br /&gt;            limit = ( num * (logn + Math.log(logn) - 1 + 1.8 * Math.log(logn) / logn) ).floor&lt;br /&gt;            Integer.primes_cache = limit.primes&lt;br /&gt;         else&lt;br /&gt;            limit = ( num * (logn + Math.log(logn) - 0.9427) ).floor&lt;br /&gt;            Integer.primes_cache = limit.primes&lt;br /&gt;         end&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;         elsif num &gt;= 15985 &amp;&amp; num &lt;= 1_000_000&lt;br /&gt;            limit = ( num * (logn + Math.log(logn) - 0.9427) ).floor&lt;br /&gt;            Integer.primes_cache = limit.primes&lt;br /&gt;         elsif num &gt; 1_000_000&lt;br /&gt;            Integer.primes_cache = 20_000_000.primes&lt;br /&gt;         end&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;      else&lt;br /&gt;         return Integer.primes_cache.at(num-1)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      if num &lt;= Integer.primes_cache.size&lt;br /&gt;         return Integer.primes_cache.at(num-1)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      if Integer.primes_cache.size &gt; 2_500_000&lt;br /&gt;         num.nthprime_add_mr &lt;br /&gt;      else&lt;br /&gt;         num.nthprime_add   # faster for a (relatively) small prime cache&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def nthprime_add       #  add primes to Integer.primes_cache up to the nth prime&lt;br /&gt;&lt;br /&gt;      num = self.to_i.abs&lt;br /&gt;&lt;br /&gt;      if num &lt;= Integer.primes_cache.size&lt;br /&gt;         return Integer.primes_cache.at(num-1)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      last_prime = Integer.primes_cache.last&lt;br /&gt;      last_prime_divmod = last_prime.divmod(6)&lt;br /&gt;&lt;br /&gt;      if last_prime_divmod.last == 1&lt;br /&gt;         i = last_prime_divmod.first&lt;br /&gt;         Integer.primes_cache.pop      # avoid a duplicate prime&lt;br /&gt;      else&lt;br /&gt;         i = last_prime_divmod.first + 1&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      while Integer.primes_cache.size &lt; num&lt;br /&gt;&lt;br /&gt;         n1 = 6*i+1       # cf. http://betterexplained.com/articles/another-look-at-prime-numbers/ and&lt;br /&gt;         n2 = n1+4        # http://everything2.com/index.pl?node_id=1176369&lt;br /&gt;         i += 1&lt;br /&gt;&lt;br /&gt;         [n1, n2].each do |p| &lt;br /&gt;&lt;br /&gt;            next if p % 5 == 0 || p % 7 == 0&lt;br /&gt;&lt;br /&gt;            next_num_sqrt = Math.sqrt(p).floor&lt;br /&gt;&lt;br /&gt;            Integer.primes_cache.each do |d| &lt;br /&gt;               if d &gt; next_num_sqrt &lt;br /&gt;                  Integer.primes_cache &lt;&lt; p&lt;br /&gt;                  #print "\r\e[0K#{Integer.primes_cache.size}"&lt;br /&gt;                  #$stdout.flush&lt;br /&gt;                  break&lt;br /&gt;               elsif p % d == 0&lt;br /&gt;                  break&lt;br /&gt;               end  &lt;br /&gt;            end&lt;br /&gt;         end   # each  &lt;br /&gt;&lt;br /&gt;      end  # while&lt;br /&gt;&lt;br /&gt;      return Integer.primes_cache.at(num-1)&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def nthprime_add_mr       #  add Miller-Rabin primes to Integer.primes_cache up to the nth prime&lt;br /&gt;&lt;br /&gt;      num = self.to_i.abs&lt;br /&gt;&lt;br /&gt;      if num &lt;= Integer.primes_cache.size&lt;br /&gt;         return Integer.primes_cache.at(num-1)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      last_prime = Integer.primes_cache.last&lt;br /&gt;      last_prime_divmod = last_prime.divmod(6)&lt;br /&gt;&lt;br /&gt;      if last_prime_divmod.last == 1&lt;br /&gt;         i = last_prime_divmod.first&lt;br /&gt;         Integer.primes_cache.pop&lt;br /&gt;      else&lt;br /&gt;         i = last_prime_divmod.first + 1&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      while Integer.primes_cache.size &lt; num&lt;br /&gt;&lt;br /&gt;         search_next_prime = true&lt;br /&gt;&lt;br /&gt;         while search_next_prime&lt;br /&gt;&lt;br /&gt;            n1 = 6*i+1       &lt;br /&gt;            n2 = n1+4        &lt;br /&gt;            i += 1&lt;br /&gt;&lt;br /&gt;            [n1, n2].each do |p| &lt;br /&gt;&lt;br /&gt;               next if p % 5 == 0 || p % 7 == 0&lt;br /&gt;&lt;br /&gt;               if p.prime?&lt;br /&gt;                  Integer.primes_cache &lt;&lt; p&lt;br /&gt;                  search_next_prime = false&lt;br /&gt;                  #print "\r\e[0K#{Integer.primes_cache.size}"&lt;br /&gt;                  #$stdout.flush&lt;br /&gt;               end&lt;br /&gt;            end&lt;br /&gt;         end&lt;br /&gt;&lt;br /&gt;      end  #  first while loop&lt;br /&gt;&lt;br /&gt;      return Integer.primes_cache.at(num-1)&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------------------------- some additional prime methods&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def next_primes_in_cache    # next primes in Integer.primes_cache&lt;br /&gt;&lt;br /&gt;      search_next_primes = self.to_i.abs&lt;br /&gt;&lt;br /&gt;      last_prime = Integer.primes_cache.last&lt;br /&gt;      last_prime_divmod = last_prime.divmod(6)&lt;br /&gt;&lt;br /&gt;      if last_prime_divmod.last == 1&lt;br /&gt;         i = last_prime_divmod.first&lt;br /&gt;         Integer.primes_cache.pop&lt;br /&gt;      else&lt;br /&gt;         i = last_prime_divmod.first + 1&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      while search_next_primes &gt; 0&lt;br /&gt;&lt;br /&gt;         n1 = 6*i+1       &lt;br /&gt;         n2 = n1+4        &lt;br /&gt;         i += 1&lt;br /&gt;&lt;br /&gt;         [n1, n2].each do |p| &lt;br /&gt;&lt;br /&gt;            next if p % 5 == 0 || p % 7 == 0&lt;br /&gt;            next_num_sqrt = Math.sqrt(p).floor&lt;br /&gt;&lt;br /&gt;            Integer.primes_cache.each do |d| &lt;br /&gt;               if d &gt; next_num_sqrt &lt;br /&gt;                  Integer.primes_cache &lt;&lt; p&lt;br /&gt;                  search_next_primes -= 1&lt;br /&gt;                  #print "\r\e[0K#{Integer.primes_cache.size}"&lt;br /&gt;                  #$stdout.flush&lt;br /&gt;                  break&lt;br /&gt;               elsif p % d == 0&lt;br /&gt;                  break&lt;br /&gt;               end  &lt;br /&gt;            end&lt;br /&gt;         end &lt;br /&gt;      end   # while&lt;br /&gt;&lt;br /&gt;      Integer.primes_cache.last(self.to_i.abs)&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def next_mr_prime     # next Miller-Rabin prime&lt;br /&gt;     &lt;br /&gt;      last_num = self.to_i.abs&lt;br /&gt;      last_num_divmod = last_num.divmod(6)&lt;br /&gt;&lt;br /&gt;      if last_num_divmod.last == 1&lt;br /&gt;         i = last_num_divmod.first&lt;br /&gt;      else&lt;br /&gt;         i = last_num_divmod.first + 1&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      next_prime = nil&lt;br /&gt;      search_next_prime = true&lt;br /&gt;&lt;br /&gt;      while search_next_prime&lt;br /&gt;&lt;br /&gt;         n1 = 6*i+1       &lt;br /&gt;         n2 = n1+4        &lt;br /&gt;         i += 1&lt;br /&gt;&lt;br /&gt;         [n1, n2].each do |p| &lt;br /&gt;&lt;br /&gt;            next if p % 5 == 0 || p % 7 == 0&lt;br /&gt;&lt;br /&gt;            if p &gt; last_num &amp;&amp; p.prime?&lt;br /&gt;               next_prime = p&lt;br /&gt;               search_next_prime = false &lt;br /&gt;               break&lt;br /&gt;            end&lt;br /&gt;         end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;         next_prime&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def next_mr_primes(n)     # next Miller-Rabin primes&lt;br /&gt;&lt;br /&gt;      last_num = self.to_i.abs&lt;br /&gt;      last_num_divmod = last_num.divmod(6)&lt;br /&gt;&lt;br /&gt;      if last_num_divmod.last == 1&lt;br /&gt;         i = last_num_divmod.first&lt;br /&gt;      else&lt;br /&gt;         i = last_num_divmod.first + 1&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      next_primes = []&lt;br /&gt;      search_next_primes = n.to_i.abs&lt;br /&gt;&lt;br /&gt;      while search_next_primes &gt; 0&lt;br /&gt;&lt;br /&gt;         n1 = 6*i+1      &lt;br /&gt;         n2 = n1+4       &lt;br /&gt;         i += 1&lt;br /&gt;&lt;br /&gt;         [n1, n2].each do |p| &lt;br /&gt;&lt;br /&gt;            next if p % 5 == 0 || p % 7 == 0&lt;br /&gt;&lt;br /&gt;            if p &gt; last_num &amp;&amp; p.prime?&lt;br /&gt;               next_primes &lt;&lt; p&lt;br /&gt;               search_next_primes -= 1 &lt;br /&gt;            end&lt;br /&gt;         end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      next_primes&lt;br /&gt;&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;num1 = 10_000&lt;br /&gt;num1 = 1_000&lt;br /&gt;num1 = 5_000&lt;br /&gt;&lt;br /&gt;num2 = 210_349&lt;br /&gt;num2 = 100_125&lt;br /&gt;num2 = 55_000&lt;br /&gt;&lt;br /&gt;ret1 = nil&lt;br /&gt;ret2 = nil&lt;br /&gt;ret3 = nil&lt;br /&gt;ret4 = nil&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Benchmark.bm(16) do |t| &lt;br /&gt;&lt;br /&gt;   t.report("first #{num1} primes: ") do&lt;br /&gt;      ret1 = num1.nthprime_add&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;   Integer.primes_cache.clear&lt;br /&gt;   Integer.primes_cache.concat(100.primes)&lt;br /&gt;&lt;br /&gt;   t.report("first #{num1} primes: ") do&lt;br /&gt;      ret2 = num1.nthprime_add_mr&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;   Integer.primes_cache.clear&lt;br /&gt;   Integer.primes_cache.concat(100.primes)&lt;br /&gt;&lt;br /&gt;   t.report("first #{num1} primes: ") do&lt;br /&gt;      ret3 = num1.nthprime&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;   Integer.primes_cache.clear&lt;br /&gt;   Integer.primes_cache.concat(100.primes)&lt;br /&gt;&lt;br /&gt;   t.report("first #{num2} primes: ") do&lt;br /&gt;      ret4 = num2.nthprime&lt;br /&gt;   end &lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;puts "the #{num1}th prime number: #{ret1}"&lt;br /&gt;puts "the #{num1}th prime number: #{ret2}"&lt;br /&gt;puts "the #{num1}th prime number: #{ret3}"&lt;br /&gt;puts "the #{num2}th prime number: #{ret4}"&lt;br /&gt;puts&lt;br /&gt;puts "the #{num1}th prime: #{Integer.primes_cache.at(num1-1)}"&lt;br /&gt;puts "the #{num2}th prime: #{Integer.primes_cache.at(num2-1)}"&lt;br /&gt;puts&lt;br /&gt;p Integer.primes_cache.first(10)&lt;br /&gt;p Integer.primes_cache.last(10)&lt;br /&gt;p Integer.primes_cache.size&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p 15.next_primes_in_cache&lt;br /&gt;&lt;br /&gt;puts 594_213.next_mr_prime&lt;br /&gt;&lt;br /&gt;p 149_137.next_mr_primes(5)&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;p 1_000.sieve_size&lt;br /&gt;p 1_000_000.sieve_size&lt;br /&gt;p 2_500_000.sieve_size&lt;br /&gt;p 5_000_000.sieve_size&lt;br /&gt;p 10_000_000.sieve_size&lt;br /&gt;p 100_000_000.sieve_size&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;=begin&lt;br /&gt;&lt;br /&gt;# check with primegen.c, http://cr.yp.to/primegen.html&lt;br /&gt;primes 2 48611 | nl | tail -n 1&lt;br /&gt;primes 2 104729 | nl | tail -n 1&lt;br /&gt;primes 2 679277 | nl | tail -n 1&lt;br /&gt;primes 2 1301423 | nl | tail -n 1&lt;br /&gt;primes 2 2903603 | nl | tail -n 1&lt;br /&gt;primes 1303129 1303283 | nl&lt;br /&gt;primes 594213 $((594213 + 500)) | head -n 1&lt;br /&gt;primes 149137 $((149137 + 1000)) | head -n 5&lt;br /&gt;&lt;br /&gt;# further prime tools from http://libtom.org&lt;br /&gt;- LibTomMath&lt;br /&gt;   bn_mp_prime_is_prime.c&lt;br /&gt;   bn_mp_prime_miller_rabin.c&lt;br /&gt;- TomsFastMath&lt;br /&gt;   fp_isprime.c&lt;br /&gt;   fp_prime_miller_rabin.c&lt;br /&gt;&lt;br /&gt;=end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 17 Apr 2008 20:32:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5380</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>ruby is_numeric? extension to String</title>
      <link>http://snippets.dzone.com/posts/show/5003</link>
      <description>&lt;code&gt;&lt;br /&gt;class String&lt;br /&gt;  def is_numeric?&lt;br /&gt;    Float self rescue false&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 18 Jan 2008 07:46:24 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5003</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>Pascal's triangle in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4700</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# cf. http://www.ruby-forum.com/topic/97105&lt;br /&gt;&lt;br /&gt;6.times { k=0; p $*.map!{|i|k+k=i} &lt;&lt; 1 }&lt;br /&gt;&lt;br /&gt;# ... or ...&lt;br /&gt;&lt;br /&gt;ar=[]; 6.times { k=0; p ar.map!{|i|k+k=i} &lt;&lt; 1 }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# a more general approach (for polynomials)&lt;br /&gt;&lt;br /&gt;class Polynomial&lt;br /&gt;&lt;br /&gt;   def triangle(nterms, row, pos=nil)&lt;br /&gt;&lt;br /&gt;      return nil if nterms &lt; 2 || row &lt; 1&lt;br /&gt;      nterms = nterms - 2&lt;br /&gt;      num_of_rows = row&lt;br /&gt;&lt;br /&gt;      var1 = 0 + nterms   &lt;br /&gt;      var2 = 1 + nterms&lt;br /&gt;      var3 = 3 + nterms &lt;br /&gt;  &lt;br /&gt;      ar1 = [0, 1, 0]   # first row&lt;br /&gt;      var1.times { ar1.push(0) }&lt;br /&gt;      var1.times { ar1.unshift(0) }&lt;br /&gt;&lt;br /&gt;      ar2 = []&lt;br /&gt;      ar3 = []&lt;br /&gt;      ar4 = [[1]]&lt;br /&gt;&lt;br /&gt;      for num in 0..(num_of_rows - 1)  &lt;br /&gt;&lt;br /&gt;         nextnum = ar1.size - var2&lt;br /&gt;&lt;br /&gt;         for nextn in 1..nextnum&lt;br /&gt;            sum = 0&lt;br /&gt;            count = 0&lt;br /&gt;            ar1.each do |n|  &lt;br /&gt;               count += 1 &lt;br /&gt;               if count &lt; var3 then t = sum += n; ar2 &lt;&lt; t else break end &lt;br /&gt;            end&lt;br /&gt;&lt;br /&gt;            ar3 &lt;&lt; ar2.last&lt;br /&gt;            ar2.clear&lt;br /&gt;            ar1.shift&lt;br /&gt;&lt;br /&gt;         end   # second for-loop&lt;br /&gt;&lt;br /&gt;         ar1.clear&lt;br /&gt;         ar1 &lt;&lt; ar3&lt;br /&gt;         ar1.flatten!&lt;br /&gt;&lt;br /&gt;         var2.times { ar1.push(0) }&lt;br /&gt;         var2.times { ar1.unshift(0) }&lt;br /&gt;&lt;br /&gt;         ar4 &lt;&lt; ar3&lt;br /&gt;         ar3 = []&lt;br /&gt;&lt;br /&gt;      end  # first for-loop&lt;br /&gt;&lt;br /&gt;      if !pos.nil?&lt;br /&gt;         ret = ar4.at(row).at(pos)&lt;br /&gt;         return "No such position: #{pos} in row: #{row}" if ret.nil?&lt;br /&gt;         ret&lt;br /&gt;      else&lt;br /&gt;         ar4.map! { |r| r.join('-') }&lt;br /&gt;         ar4&lt;br /&gt;      end&lt;br /&gt;   end &lt;br /&gt;end &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;puts Polynomial.new.triangle(2, 5)&lt;br /&gt;puts Polynomial.new.triangle(3, 5)&lt;br /&gt;puts Polynomial.new.triangle(4, 5)&lt;br /&gt;puts Polynomial.new.triangle(5, 5)&lt;br /&gt;puts Polynomial.new.triangle(5, 4, 8)&lt;br /&gt;puts Polynomial.new.triangle(4, 9)&lt;br /&gt;puts Polynomial.new.triangle(4, 9, 10)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;   def fak&lt;br /&gt;      f=1&lt;br /&gt;      (2..self).each { |i| f *= i   }&lt;br /&gt;      f&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;module Enumerable&lt;br /&gt;   def sum&lt;br /&gt;      inject { |n, m| n + m  }&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# cf. http://blade.nagaokaut.ac.jp/~sinara/ruby/math/combinatorics/array-rep_perm.rb&lt;br /&gt;class Array&lt;br /&gt;  def rep_perm(n)&lt;br /&gt;    if n &lt; 0&lt;br /&gt;    elsif n == 0&lt;br /&gt;      yield([])&lt;br /&gt;    else&lt;br /&gt;      rep_perm(n - 1) do |x|&lt;br /&gt;	each do |y|&lt;br /&gt;	  yield(x + [y])&lt;br /&gt;	end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nterms = 2&lt;br /&gt;exponent = 80&lt;br /&gt;exponent = 8&lt;br /&gt;&lt;br /&gt;# create the same number of variable names as there are terms &lt;br /&gt;# example: ['a', 'b'] for (a+b)**3&lt;br /&gt;&lt;br /&gt;var_names = ('a'..'z').to_a.slice(0, nterms)&lt;br /&gt;#var_names = (('a'..'z').to_a &lt;&lt; ('A'..'Z').to_a &lt;&lt; ('aa'..'zz').to_a).flatten!.slice(0, nterms)&lt;br /&gt;&lt;br /&gt;ar1 = []&lt;br /&gt;(0..exponent).to_a.rep_perm(nterms) { |x| p x; ar1 &lt;&lt; x if x.sum == exponent }   # example: ... if [2,6].sum == 8&lt;br /&gt;ar1.reverse!&lt;br /&gt;&lt;br /&gt;#p ar1&lt;br /&gt;#puts ar1&lt;br /&gt;&lt;br /&gt;ar2 = []&lt;br /&gt;&lt;br /&gt;ar1.each do |term|&lt;br /&gt;&lt;br /&gt;   #puts "term: #{term.inspect}"  # example: term: [5, 0, 0]&lt;br /&gt;   count = 0&lt;br /&gt;   var1 = 1&lt;br /&gt;   term.each { |i| var1 *= i.fak }&lt;br /&gt;   var2 = exponent.fak / var1 &lt;br /&gt;   var3 = "#{var2}   (  #{ term.join('-') &lt;&lt; '-' } )"  # prepare term for parsing with gsub below&lt;br /&gt;   ar2 &lt;&lt; var3&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#p ar2&lt;br /&gt;&lt;br /&gt;result = ar2.collect do |term|&lt;br /&gt;   p term&lt;br /&gt;   count = -1&lt;br /&gt;   term.gsub!(/(\d+)-/)  { count += 1;  "#{var_names.at(count)}" &lt;&lt; '**' &lt;&lt; $1 &lt;&lt; ' ' }&lt;br /&gt;   term.gsub!(/^(\d+)( +)/, '\1\2*\2')&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts result&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 26 Oct 2007 17:02:28 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4700</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Random numbers in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4697</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# Pseudo random number generator&lt;br /&gt;# From: http://gnuvince.wordpress.com/2005/11/24/pseudo-random-number-generator&lt;br /&gt;# Author: Vincent Foley-Bourgon&lt;br /&gt;&lt;br /&gt;def random_number&lt;br /&gt;  t = Time.now.to_f / (Time.now.to_f % Time.now.to_i)&lt;br /&gt;  random_seed = t * 1103515245 + 12345;&lt;br /&gt;  (random_seed / 65536) % 32768;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;10.times { puts random_number }&lt;br /&gt;&lt;br /&gt;cnt = Array.new(10,0)&lt;br /&gt;20000.times { cnt[(random_number % 10).to_i] += 1 }&lt;br /&gt;p cnt&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Ruby Gaussian Random Number Generator&lt;br /&gt;# Author: Glenn&lt;br /&gt;# http://webhost101.net/rails/typo/articles/2007/07/31/ruby-gaussian-random-number-generator&lt;br /&gt;&lt;br /&gt;def gaussian_rand &lt;br /&gt;   u1 = u2 = w = g1 = g2 = 0  # declare&lt;br /&gt;   begin&lt;br /&gt;     u1 = 2 * rand - 1&lt;br /&gt;     u2 = 2 * rand - 1&lt;br /&gt;     w = u1 * u1 + u2 * u2&lt;br /&gt;   end while w &gt;= 1&lt;br /&gt;   &lt;br /&gt;   w = Math::sqrt( ( -2 * Math::log(w)) / w )&lt;br /&gt;   g2 = u1 * w;&lt;br /&gt;   g1 = u2 * w;&lt;br /&gt;   # g1 is returned  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;sum = 0&lt;br /&gt;sumsq = 0&lt;br /&gt;n = 1000&lt;br /&gt;0.upto(n) do &lt;br /&gt;  #r = gaussian_rand&lt;br /&gt;  r = gaussian_rand * 100 + 50   # new_random_number = gaussian_rand * standard_deviation + average&lt;br /&gt;  #puts r&lt;br /&gt;  sum += r&lt;br /&gt;  sumsq += (r*r)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;ave = sum/n&lt;br /&gt;stddev = Math::sqrt(sumsq/n - ave * ave)&lt;br /&gt;puts "Average = #{ave}"&lt;br /&gt;puts "StdDev = #{stddev}"&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Random Number Generator&lt;br /&gt;# http://scutigena.sourceforge.net/test-random.html&lt;br /&gt;# http://scutigena.sourceforge.net/sources/ruby-1.7.2/random.html&lt;br /&gt;# $Id: random.ruby,v 1.2 2003/12/30 01:25:05 davidw Exp $&lt;br /&gt;&lt;br /&gt;IM = 139968&lt;br /&gt;IA = 3877&lt;br /&gt;IC = 29573&lt;br /&gt;&lt;br /&gt;$last = 42.0&lt;br /&gt;def gen_random (max) (max * ($last = ($last * IA + IC) % IM)) / IM end&lt;br /&gt;&lt;br /&gt;10.times do&lt;br /&gt;    puts gen_random(100000.0)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;printf "%.5f\n", gen_random(100.0)&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# From: http://matt.blogs.it/entries/00002641.html&lt;br /&gt;# Author: Matt Mower&lt;br /&gt;# cf. http://www.taygeta.com/random/gaussian.html&lt;br /&gt;# cf. http://www.bearcave.com/misl/misl_tech/wavelets/hurst/random.html&lt;br /&gt;&lt;br /&gt;def box_mueller( mean = 0.0, stddev = 1.0 )&lt;br /&gt;  x1 = 0.0, x2 = 0.0, w = 0.0&lt;br /&gt;&lt;br /&gt;  until w &gt; 0.0 &amp;&amp; w &lt; 1.0&lt;br /&gt;    x1 = 2.0 * rand - 1.0&lt;br /&gt;    x2 = 2.0 * rand - 1.0&lt;br /&gt;    w = ( x1 * x2 ) + ( x2 * x2 )&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  w = Math.sqrt( -2.0 * Math.log( w ) / w )&lt;br /&gt;  r = x1 * w&lt;br /&gt;&lt;br /&gt;  mean + r * stddev&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;10.times { puts box_mueller(5.0, 1.0) }&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Generating random numbers with a specified distribution&lt;br /&gt;# From: http://www.cs.nyu.edu/~michaels/blog/?p=24&lt;br /&gt;# Author: Michael Schidlowsky&lt;br /&gt;&lt;br /&gt;def gen&lt;br /&gt;  (x=rand)&gt;0.5 ? x : (x &lt; rand/2.0) ? 1.0 - x : x&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def gen2&lt;br /&gt;   (x = rand) &amp;&amp; rand ? 1.0 - x : x&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def compute_distribution(numSamples, &amp;block)&lt;br /&gt;   samples = []&lt;br /&gt;   values = 10&lt;br /&gt;   numSamples.times{samples &lt;&lt; yield}&lt;br /&gt;   dist = Array.new(values, 0)&lt;br /&gt;   samples.each{ |s| dist[(s*values).floor] += 1 }&lt;br /&gt;   dist&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;p compute_distribution(1000){rand}&lt;br /&gt;p compute_distribution(1000){gen}&lt;br /&gt;p compute_distribution(1000) { gen2 }&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Random number generation for a triangular distribution&lt;br /&gt;# From: http://www.brighton-webs.co.uk/distributions/triangular.asp&lt;br /&gt;# cf. http://en.wikipedia.org/wiki/Triangular_distribution&lt;br /&gt;&lt;br /&gt;def rng(m, low, high)&lt;br /&gt;&lt;br /&gt;   # cf. the parameter info at http://www.brighton-webs.co.uk/distributions/triangular.asp&lt;br /&gt;   return nil unless high &gt; low &amp;&amp; m &gt; low &amp;&amp; m &lt; high    &lt;br /&gt;&lt;br /&gt;   u = rand&lt;br /&gt;&lt;br /&gt;   if u &lt;= (m-low)/(high-low)&lt;br /&gt;      r = low+ Math.sqrt(u*(high-low)*(m-low))&lt;br /&gt;   else&lt;br /&gt;      r = high - Math.sqrt((1.0-u)*(high-low)*(high-m))&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;10.times do&lt;br /&gt;  #puts rng(0.0, -25.0, 25.0)&lt;br /&gt;  puts rng(50.0, 25.0, 75.0)&lt;br /&gt;end&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# From: http://www.ruby-forum.com/topic/95931&lt;br /&gt;# Author: Christoffer Lern&#246;&lt;br /&gt;&lt;br /&gt;class Range&lt;br /&gt;  def rand&lt;br /&gt;    return first if exclude_end? &amp;&amp; last == first&lt;br /&gt;    Kernel::rand(last - first + (exclude_end? ? 0 : 1)) + first&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;r1 = -9..9&lt;br /&gt;r2 = -90...100&lt;br /&gt;p r1.rand, r2.rand&lt;br /&gt;&lt;br /&gt;r3 = 0..9&lt;br /&gt;&lt;br /&gt;num = []&lt;br /&gt;10.times do&lt;br /&gt;   num &lt;&lt; r3.rand&lt;br /&gt;   if num.first.zero? then num.shift; redo end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;p num&lt;br /&gt;puts num.to_s.to_i&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# See:&lt;br /&gt;# http://redcorundum.blogspot.com/2008/01/randomizing-array-revisited.html&lt;br /&gt;# http://redcorundum.blogspot.com/2006/12/randomizing-array-and-other-faqs.html&lt;br /&gt;# http://szeryf.wordpress.com/2007/06/19/a-simple-shuffle-that-proved-not-so-simple-after-all/&lt;br /&gt;&lt;br /&gt;class Array&lt;br /&gt;  def shuffle&lt;br /&gt;    array = dup&lt;br /&gt;    size.downto 2 do |j|&lt;br /&gt;      r = rand j&lt;br /&gt;      array[j-1], array[r] = array[r], array[j-1]&lt;br /&gt;    end&lt;br /&gt;    array&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;array = (1..50).to_a&lt;br /&gt;&lt;br /&gt;10.times { p array.shuffle.first(10) }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#-------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class RNG&lt;br /&gt;&lt;br /&gt;   def num(min=8,max=min+5,iter=1)&lt;br /&gt;&lt;br /&gt;      return nil unless min.is_a?(Integer) &amp;&amp; max.is_a?(Integer) &amp;&amp; max &gt; min &amp;&amp; iter.is_a?(Integer)&lt;br /&gt;&lt;br /&gt;      ret = []&lt;br /&gt;      stats = Hash.new(0)     # optional; cf. stats[random_num] += 1&lt;br /&gt;      digits = Array(0..9).sort_by {rand}&lt;br /&gt;      #digits = (Array(0..9) * (rand(4)+1)).sort_by {rand}&lt;br /&gt;      digits_size = digits.size&lt;br /&gt;&lt;br /&gt;      iter.times do&lt;br /&gt;         count = 0&lt;br /&gt;         len = min + rand(max-min+1)&lt;br /&gt;         ar = []&lt;br /&gt;         while count &lt; len&lt;br /&gt;            i = rand(digits_size)    # get a random array index&lt;br /&gt;            random_num = digits.at(i)&lt;br /&gt;            stats[random_num] += 1&lt;br /&gt;            ar &lt;&lt; random_num&lt;br /&gt;            digits = digits.sort_by {rand}&lt;br /&gt;            count += 1&lt;br /&gt;            if count == 1 &amp;&amp; ar.first.zero? then ar.shift; stats[0] -= 1; count = 0 end&lt;br /&gt;         end&lt;br /&gt;         ret &lt;&lt; ar.to_s.to_i&lt;br /&gt;      end  # iter&lt;br /&gt;      #ret&lt;br /&gt;      ret &lt;&lt; stats   # optional&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;&lt;br /&gt;min = 8&lt;br /&gt;max = 13&lt;br /&gt;iter = 10000&lt;br /&gt;result =  RNG.new.num(min, max, iter)&lt;br /&gt;stats = result.pop&lt;br /&gt;&lt;br /&gt;t = 0&lt;br /&gt;stats.each_value { |v| t += v }  # get the overall frequency&lt;br /&gt;&lt;br /&gt;n = 0&lt;br /&gt;t = t * 1.0&lt;br /&gt;m = t / 10.0 &lt;br /&gt;&lt;br /&gt;stats.sort.each do |k,v| &lt;br /&gt;   i = (v / t) * 100.0&lt;br /&gt;   x = v &gt; m ? v - m : m - v&lt;br /&gt;   y = (x / m) * 100.0&lt;br /&gt;   n += i&lt;br /&gt;   puts "#{k}  ::  #{"%.2f" % m}  ::  #{v}  ::  #{"%.2f" % i} %  ::  #{ "%.2f" % ((m-v) * -1) }  ::  #{"%.2f" % y} %"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;puts n, m, t&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;puts RNG.new.num(20, 25, 10)[0..-2]&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;rn = RNG.new.num(80, 100)&lt;br /&gt;puts rn[0..-2]&lt;br /&gt;p rn.last&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Wed, 24 Oct 2007 19:01:38 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4697</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Miller-Rabin prime test in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4636</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# From: http://en.wikipedia.org/wiki/Miller-Rabin_primality_test&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;   def prime?&lt;br /&gt;     n = self.abs()&lt;br /&gt;     return true if n == 2&lt;br /&gt;     return false if n == 1 || n &amp; 1 == 0&lt;br /&gt;&lt;br /&gt;     # cf. http://betterexplained.com/articles/another-look-at-prime-numbers/ and&lt;br /&gt;     # http://everything2.com/index.pl?node_id=1176369&lt;br /&gt;&lt;br /&gt;     return false if n &gt; 3 &amp;&amp; n % 6 != 1 &amp;&amp; n % 6 != 5     # added&lt;br /&gt;&lt;br /&gt;     d = n-1&lt;br /&gt;     d &gt;&gt;= 1 while d &amp; 1 == 0&lt;br /&gt;     20.times do                               # 20 = k from above&lt;br /&gt;       a = rand(n-2) + 1&lt;br /&gt;       t = d&lt;br /&gt;       y = ModMath.pow(a,t,n)                  # implemented below&lt;br /&gt;       while t != n-1 &amp;&amp; y != 1 &amp;&amp; y != n-1&lt;br /&gt;         y = (y * y) % n&lt;br /&gt;         t &lt;&lt;= 1&lt;br /&gt;       end&lt;br /&gt;       return false if y != n-1 &amp;&amp; t &amp; 1 == 0&lt;br /&gt;     end&lt;br /&gt;     return true&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt; &lt;br /&gt;module ModMath&lt;br /&gt;   def ModMath.pow(base, power, mod)&lt;br /&gt;     result = 1&lt;br /&gt;     while power &gt; 0&lt;br /&gt;       result = (result * base) % mod if power &amp; 1 == 1&lt;br /&gt;       base = (base * base) % mod&lt;br /&gt;       power &gt;&gt;= 1;&lt;br /&gt;     end&lt;br /&gt;     result&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# From: http://www.h2np.net/tips/ruby-cipher-math.txt&lt;br /&gt;# Author: Hironobu SUZUKI&lt;br /&gt;&lt;br /&gt;# $Id: mathh.rb,v 1.5 2002/11/24 16:15:56 hironobu Exp $&lt;br /&gt;# Simple Secure Stream Cryptography&lt;br /&gt;# Mathematical Library&lt;br /&gt;# Hironobu SUZUKI &lt;hironobu@h2np.net&gt;&lt;br /&gt;# LGPL, (C) 2002, Hironobu SUZUKI&lt;br /&gt;&lt;br /&gt;class Random  &lt;br /&gt;  def initialize()&lt;br /&gt;    @random_device="/dev/urandom"&lt;br /&gt;    @verbose=false&lt;br /&gt;  end&lt;br /&gt;  def random_device=(str)&lt;br /&gt;    @random_device=str&lt;br /&gt;  end&lt;br /&gt;  def verbose&lt;br /&gt;    @verbose=true&lt;br /&gt;  end&lt;br /&gt;  def get(size)&lt;br /&gt;    if (@verbose) ;STDERR.print "+";end&lt;br /&gt;    value=0&lt;br /&gt;    r=File.open(@random_device)&lt;br /&gt;    r.read(size).each_byte {|c|&lt;br /&gt;      value = (value &lt;&lt; 8) + c.to_i&lt;br /&gt;    }&lt;br /&gt;    r.close&lt;br /&gt;    return value&lt;br /&gt;    &lt;br /&gt;  end&lt;br /&gt;  def get_prime(lower,higher)&lt;br /&gt;    bytesize = higher.bytesize&lt;br /&gt;    while true&lt;br /&gt;      r = self.get(bytesize)&lt;br /&gt;      if (r % 2 == 0) ; r -= 1 ;   end&lt;br /&gt;      if ( lower &lt;=  r &amp;&amp; r &lt;= higher &amp;&amp; r.prime? == true )&lt;br /&gt;	return r&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Integer&lt;br /&gt;  def cdiv(d)			# ceil divide&lt;br /&gt;    w=self.divmod(d)&lt;br /&gt;    if w[1] &gt; 0 ;  w[0] +=1 ; end&lt;br /&gt;    return w[0]&lt;br /&gt;  end&lt;br /&gt;  def powm(i,n)	# square-and-multiply for exp modulo n&lt;br /&gt;    if ( i == 0 )&lt;br /&gt;      return 1&lt;br /&gt;    end&lt;br /&gt;    b=1&lt;br /&gt;    a=self&lt;br /&gt;&lt;br /&gt;    if ( (i &amp; 1) == 1 )&lt;br /&gt;      b=a&lt;br /&gt;    end&lt;br /&gt;    i = i&gt;&gt;1&lt;br /&gt;&lt;br /&gt;    while ( i &gt; 0 )&lt;br /&gt;      a = (a * a) % n&lt;br /&gt;      if ( (i &amp; 1) == 1 )&lt;br /&gt;	b = (a * b) % n &lt;br /&gt;      end&lt;br /&gt;      i = i&gt;&gt;1&lt;br /&gt;    end&lt;br /&gt;    return b&lt;br /&gt;  end&lt;br /&gt;  def gcd(b)			# GCD&lt;br /&gt;    a = self&lt;br /&gt;    if ( a &lt; b ); t=b; b=a; a=t; end&lt;br /&gt;    while b &gt; 0 &lt;br /&gt;      r = a % b &lt;br /&gt;      a = b&lt;br /&gt;      b = r&lt;br /&gt;    end&lt;br /&gt;    return a&lt;br /&gt;  end&lt;br /&gt;  def invert(n)  # Extension Euclid Algorithm&lt;br /&gt;    a = n        # See Knuth's The Art of Computer Programming &lt;br /&gt;    b = self % n # Vol2 pp.342 -- 343  &lt;br /&gt;    p = 0 ; q = 1;  v = 0;  u = 1;&lt;br /&gt;    while q &gt; 0 &lt;br /&gt;      p = a / b&lt;br /&gt;      q =  a % b&lt;br /&gt;      w = v - (p*u)&lt;br /&gt;      ## DEBUG    printf "%d = %d(%d) + %d  (%d)\n", a,p,b,q,v ###&lt;br /&gt;      a = b&lt;br /&gt;      b = q&lt;br /&gt;      v = u&lt;br /&gt;      u = w&lt;br /&gt;    end&lt;br /&gt;    return (v+n) % n&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;# Miller-Rabin Test  (Prime Test)&lt;br /&gt;# See, http://www.cs.albany.edu/~berg/csi445/Assignments/pa4.html&lt;br /&gt;  def bitarray(n) &lt;br /&gt;    b=Array::new  &lt;br /&gt;    i=0       &lt;br /&gt;    v=n&lt;br /&gt;    while v &gt; 0&lt;br /&gt;      b[i] = (0x1 &amp; v)&lt;br /&gt;      v = v/2&lt;br /&gt;      i = i + 1&lt;br /&gt;    end&lt;br /&gt;    return b&lt;br /&gt;  end&lt;br /&gt;  def miller_rabin(n,s)&lt;br /&gt;    b=bitarray(n-1)&lt;br /&gt;    i=b.size &lt;br /&gt;    j =1&lt;br /&gt;    while j &lt;= s&lt;br /&gt;      a = 1 + (rand(n-2).to_i)&lt;br /&gt;      if witness(a,n,i,b) == true&lt;br /&gt;	return false&lt;br /&gt;      end&lt;br /&gt;      j+=1&lt;br /&gt;    end&lt;br /&gt;    return true&lt;br /&gt;  end&lt;br /&gt;  def witness(a,n,i,b)&lt;br /&gt;    d=1&lt;br /&gt;    x=0&lt;br /&gt;    while i &gt; 0 &lt;br /&gt;      x = d &lt;br /&gt;      d = (d**2) % n&lt;br /&gt;      if ( (d == 1) &amp;&amp; (x != 1) &amp;&amp; (x != (n-1)) )&lt;br /&gt;	return true&lt;br /&gt;      end&lt;br /&gt;      if ( b[i-1] == 1 )&lt;br /&gt;	d = (d * a ) % n&lt;br /&gt;      end&lt;br /&gt;      i -= 1&lt;br /&gt;    end&lt;br /&gt;    if ( d != 1) &lt;br /&gt;      return true&lt;br /&gt;    end&lt;br /&gt;    return false&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  #def prime?&lt;br /&gt;  def is_prime?&lt;br /&gt;    a = self&lt;br /&gt;    return miller_rabin(a,30)    &lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def bytesize&lt;br /&gt;    n = self&lt;br /&gt;    i=0&lt;br /&gt;    while n &gt; 0&lt;br /&gt;      n = n &gt;&gt; 8&lt;br /&gt;      i += 1&lt;br /&gt;    end&lt;br /&gt;    return i&lt;br /&gt;  end&lt;br /&gt;  def bitsize&lt;br /&gt;    n = self&lt;br /&gt;    i=0&lt;br /&gt;    while n &gt; 0&lt;br /&gt;      n = n &gt;&gt; 1&lt;br /&gt;      i += 1&lt;br /&gt;    end&lt;br /&gt;    return i&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p 107565456790871.prime?      # true&lt;br /&gt;p 107565456790871.is_prime?   # true&lt;br /&gt;&lt;br /&gt;a = 107565456790871&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;  a += 2&lt;br /&gt;end while !a.prime? &amp;&amp; !a.is_prime?&lt;br /&gt;&lt;br /&gt;puts a   #=&gt; 107565456790991 (next prime)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 11 Oct 2007 18:20:02 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4636</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>nsieve for Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4635</link>
      <description>From: &lt;a href="http://shootout.alioth.debian.org/debian/benchmark.php?test=nsievebits&amp;lang=ruby&amp;id=2"&gt;The Great Computer Language Shootout: nsieve-bits Ruby&lt;/a&gt;&lt;br /&gt;Author: Glenn Parker&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;CharExponent = 3&lt;br /&gt;BitsPerChar = 1 &lt;&lt; CharExponent&lt;br /&gt;LowMask = BitsPerChar - 1&lt;br /&gt;&lt;br /&gt;def sieve(m)&lt;br /&gt;  ret = []&lt;br /&gt;  items = "\xFF" * ((m / BitsPerChar) + 1)&lt;br /&gt;  masks = ""&lt;br /&gt;  BitsPerChar.times do |b|&lt;br /&gt;    masks &lt;&lt; (1 &lt;&lt; b).chr&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  count = 0&lt;br /&gt;  pmax = m - 1&lt;br /&gt;  2.step(pmax, 1) do |p|&lt;br /&gt;    if items[p &gt;&gt; CharExponent][p &amp; LowMask] == 1&lt;br /&gt;      ret &lt;&lt; p&lt;br /&gt;      count += 1&lt;br /&gt;      p.step(pmax, p) do |mult|&lt;br /&gt;	a = mult &gt;&gt; CharExponent&lt;br /&gt;	b = mult &amp; LowMask&lt;br /&gt;	items[a] -= masks[b] if items[a][b] != 0&lt;br /&gt;        #p items&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  #count&lt;br /&gt;  ret&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;n = (ARGV[0] || 2).to_i&lt;br /&gt;n.step(n - 2, -1) do |exponent|&lt;br /&gt;  break if exponent &lt; 0&lt;br /&gt;  m = 2 ** exponent * 10_000&lt;br /&gt;  primes = sieve(m)&lt;br /&gt;  count = primes.size&lt;br /&gt;  puts&lt;br /&gt;  printf "Primes up to %8d %8d\n", m, count&lt;br /&gt;  puts "last ten primes: #{primes[-10..-1].join(' ')}"&lt;br /&gt;  puts&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 11 Oct 2007 16:19:39 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4635</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>Custom base conversion (to and from)</title>
      <link>http://snippets.dzone.com/posts/show/4594</link>
      <description>Handy to store large numbers in a shorter notation. Doesn't work with negative numbers (for negative numbers you need to store an additional byte to indicate a positive or negative value, pass the absolute value).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	private static final short BASE_40_RADIX = 40;&lt;br /&gt;	private static final short BASE_40_BASE = 48;&lt;br /&gt;	private static final String BASE_40_ZERO = "0";&lt;br /&gt;&lt;br /&gt;	public static long fromBase40(char[] cs) {&lt;br /&gt;		return fromBase(cs, BASE_40_BASE, BASE_40_RADIX);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static char[] toBase40(final long i) {&lt;br /&gt;		return toBase(i, BASE_40_BASE, BASE_40_RADIX, BASE_40_ZERO);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static final short BASE_75_RADIX = 75;&lt;br /&gt;	private static final short BASE_75_BASE = 48;&lt;br /&gt;	private static final String BASE_75_ZERO = "0";&lt;br /&gt;&lt;br /&gt;	public static long fromBase75(char[] cs) {&lt;br /&gt;		return fromBase(cs, BASE_75_BASE, BASE_75_RADIX);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static char[] toBase75(final long i) {&lt;br /&gt;		return toBase(i, BASE_75_BASE, BASE_75_RADIX, BASE_75_ZERO);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static final short BASE_90_RADIX = 90;&lt;br /&gt;	private static final short BASE_90_BASE = 33;&lt;br /&gt;	private static final String BASE_90_ZERO = "!";&lt;br /&gt;&lt;br /&gt;	public static long fromBase90(char[] cs) {&lt;br /&gt;		return fromBase(cs, BASE_90_BASE, BASE_90_RADIX);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static char[] toBase90(final long i) {&lt;br /&gt;		return toBase(i, BASE_90_BASE, BASE_90_RADIX, BASE_90_ZERO);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static char[] toBase(final long i, final short base, final short radix, String nullCharacter) {&lt;br /&gt;		long value = i;&lt;br /&gt;&lt;br /&gt;		if (value == 0) {&lt;br /&gt;			return nullCharacter.toCharArray();&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		String result = "";&lt;br /&gt;		while (value &gt; 0) {&lt;br /&gt;			long mod = value % radix;&lt;br /&gt;			value -= mod;&lt;br /&gt;			if (value &gt; 0) value /= radix;&lt;br /&gt;			result = (char)(mod + base) + result;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return result.toCharArray();&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static long fromBase(char[] cs, final short base, final short radix) {&lt;br /&gt;		long value = 0;&lt;br /&gt;		for (int i = cs.length - 1; i &gt;= 0; i--) {&lt;br /&gt;			int digit = ((int)cs[i]) - base;&lt;br /&gt;			if (digit &lt; 0 || digit &gt;= radix) {&lt;br /&gt;				throw new IllegalArgumentException("Invalid Base" + radix + " character: " + cs[i]);&lt;br /&gt;			}&lt;br /&gt;			long digitBase = (long)Math.pow(radix, (cs.length - 1) - i);&lt;br /&gt;			value = (digit * digitBase) + value;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return value;&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And here are some tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public void testFromBase40() {&lt;br /&gt;		assertEquals(2559999, NumberUtils.fromBase40("WWWW".toCharArray()));&lt;br /&gt;		assertEquals(1117580, NumberUtils.fromBase40("ABCD".toCharArray()));&lt;br /&gt;&lt;br /&gt;		assertEquals(0, NumberUtils.fromBase40("0".toCharArray()));&lt;br /&gt;		assertEquals(1, NumberUtils.fromBase40("1".toCharArray()));&lt;br /&gt;&lt;br /&gt;		assertEquals(40, NumberUtils.fromBase40("10".toCharArray()));&lt;br /&gt;		assertEquals(80, NumberUtils.fromBase40("20".toCharArray()));&lt;br /&gt;&lt;br /&gt;		assertEquals(41, NumberUtils.fromBase40("11".toCharArray()));&lt;br /&gt;		assertEquals(81, NumberUtils.fromBase40("21".toCharArray()));&lt;br /&gt;&lt;br /&gt;		assertEquals(81, NumberUtils.fromBase40("0021".toCharArray()));&lt;br /&gt;&lt;br /&gt;		assertEquals(3061560805L, NumberUtils.fromBase40("MSTSD5".toCharArray()));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testToBase40() {&lt;br /&gt;		assertEquals("0", new String(NumberUtils.toBase40(0)));&lt;br /&gt;		assertEquals("1", new String(NumberUtils.toBase40(1)));&lt;br /&gt;&lt;br /&gt;		assertEquals("10", new String(NumberUtils.toBase40(40)));&lt;br /&gt;		assertEquals("20", new String(NumberUtils.toBase40(80)));&lt;br /&gt;&lt;br /&gt;		assertEquals("11", new String(NumberUtils.toBase40(41)));&lt;br /&gt;		assertEquals("21", new String(NumberUtils.toBase40(81)));&lt;br /&gt;&lt;br /&gt;		assertEquals("ABCD", new String(NumberUtils.toBase40(1117580)));&lt;br /&gt;		assertEquals("WWWW", new String(NumberUtils.toBase40(2559999)));&lt;br /&gt;&lt;br /&gt;		assertEquals("MSTSD5", new String(NumberUtils.toBase40(3061560805L)));&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testToBase90() throws Exception {&lt;br /&gt;		assertEquals("#Q&amp;Y.`QY#", new String(NumberUtils.toBase90(10908158098650842L)));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testFromBase90() throws Exception {&lt;br /&gt;		assertEquals(10908158098650842L, NumberUtils.fromBase90("#Q&amp;Y.`QY#".toCharArray()));&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Sun, 30 Sep 2007 23:44:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4594</guid>
      <author>devijvers (Steven Devijver)</author>
    </item>
    <item>
      <title>Calculate 2 to the power of N</title>
      <link>http://snippets.dzone.com/posts/show/4495</link>
      <description>// Calculate 2 to the power of N&lt;br /&gt;// Returns "double" value&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        private double TwoPowerN(int n)&lt;br /&gt;        {&lt;br /&gt;            int k;&lt;br /&gt;            int i = 1;&lt;br /&gt;&lt;br /&gt;            for (k=1; k &lt;= n; k++)&lt;br /&gt;            {&lt;br /&gt;                    i = i * 2;   &lt;br /&gt;            }&lt;br /&gt;            return i&lt;br /&gt;        }&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 06 Sep 2007 10:21:15 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4495</guid>
      <author>dubby (Dave)</author>
    </item>
  </channel>
</rss>
