class Sperm::Groups::ZpMul

Represents (Z/pZ \ {0}, *) - a multiplicative cyclic group of integers modulo p.

Attributes

generator[R]
modulo[R]
prime[R]

Public Class Methods

new(prime, generator) click to toggle source
# File lib/sperm/groups/multiplicative.rb, line 13
def initialize(prime, generator)
  @prime = prime
  @generator = generator
end

Public Instance Methods

order() click to toggle source
# File lib/sperm/groups/multiplicative.rb, line 18
def order
  modulo - 1
end
produce_cycle(first, multiplier) click to toggle source
# File lib/sperm/groups/multiplicative.rb, line 22
def produce_cycle(first, multiplier)
  fail ArgumentError, 'not an element' unless include?(first) && include?(multiplier)
  Enumerator.new do |yielder|
    current = first
    loop do
      yielder.yield current
      current = (current * multiplier) % modulo
      break if current == first
    end
  end
end