Class: Abst::IntegerResidueRing

Inherits:
Object
  • Object
show all
Includes:
Ring
Defined in:
lib/include/integer.rb

Direct Known Subclasses

IntegerResidueField

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Ring

#%, #**, #/, included

Constructor Details

#initialize(n) ⇒ IntegerResidueRing

Returns a new instance of IntegerResidueRing.



323
324
325
# File 'lib/include/integer.rb', line 323

def initialize(n)
	@n = n % self.class.mod
end

Class Attribute Details

.modObject (readonly)

Returns the value of attribute mod.



288
289
290
# File 'lib/include/integer.rb', line 288

def mod
  @mod
end

Instance Attribute Details

#nObject (readonly)

Returns the value of attribute n.



321
322
323
# File 'lib/include/integer.rb', line 321

def n
  @n
end

Class Method Details

.cardinalityObject

Raises:

  • (ArgumentError)


309
310
311
312
313
314
315
316
317
318
319
# File 'lib/include/integer.rb', line 309

def order(op = :+)
	case op
	when :+
		return @mod
	when :*
		@order = phi(@mod) unless defined?(@order)
		return @order
	end

	raise ArgumentError, "unrecognized argument #{op} was specified"
end

.oneObject



294
295
296
# File 'lib/include/integer.rb', line 294

def one
	return self.new(1)
end

.order(op = :+) ⇒ Object

Raises:

  • (ArgumentError)


298
299
300
301
302
303
304
305
306
307
308
# File 'lib/include/integer.rb', line 298

def order(op = :+)
	case op
	when :+
		return @mod
	when :*
		@order = phi(@mod) unless defined?(@order)
		return @order
	end

	raise ArgumentError, "unrecognized argument #{op} was specified"
end

.to_sObject



311
312
313
# File 'lib/include/integer.rb', line 311

def to_s
	return "Z / #{@mod}Z"
end

.to_texObject



315
316
317
318
# File 'lib/include/integer.rb', line 315

def to_tex
	z = Z.to_tex
	return z + " / #{@mod}" + z
end

.zeroObject



290
291
292
# File 'lib/include/integer.rb', line 290

def zero
	return self.new(0)
end

Instance Method Details

#==(other) ⇒ Object



333
334
335
336
337
# File 'lib/include/integer.rb', line 333

def ==(other)
	return false unless self.class.superclass == other.class.superclass
	return false unless self.class.mod == other.class.mod
	return @n == other.n
end

#inverseObject



339
340
341
# File 'lib/include/integer.rb', line 339

def inverse
	return self.class.new(Abst.inverse(@n, self.class.mod))
end

#order(op) ⇒ Object

Raises:

  • (ArgumentError)


343
344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/include/integer.rb', line 343

def order(op)
	mod = self.class.mod

	case op
	when :+
		return mod / gcd(@n, mod)
	when :*
		raise ArgumentError, "#{self} is not invertible" unless 1 == gcd(@n, mod)
		return element_order(self, self.class.order(op))
	end

	raise ArgumentError, "unrecognized argument #{op} was specified"
end

#to_iObject



362
363
364
# File 'lib/include/integer.rb', line 362

def to_i
	return @n
end

#to_sObject Also known as: inspect



357
358
359
# File 'lib/include/integer.rb', line 357

def to_s
	return "#{@n} (mod #{self.class.mod})"
end