# intmodp Specification Sheet

Computer Algebra Kit (c) 1993,00 by Comp.Alg.Objects. All Rights Reserved.

# IntegerModp

Inherits from: CAObject

Maturity Index: Relatively immature

## Class Description

Instances are integers modulo a small, prime number, the modulus of the object. The modulus can currently not be equal to two; it must be equal to or less than USHRT_MAX_PRIME (the largest prime number that fits in an unsigned short word, as defined in the header file cakit/IntegerModp.h). Objects belong to the same class in the sense of sameClass: iff. the moduli are equal.

Every integer mod p keeps its own copy of the modulus; you don't need to set a global modulus. As a consequence, it is possible to do multiple calculations modulo a different prime, even concurrenlty.

IntegerModp is the prototype, in the Computer Algebra Kit, of a field i.e., a structure where each (nonzero) element has a multiplicative inverse (see inField and inverse). Matrix (in Gaussian elimination) and Polynomial (in polynomial division) take advantage of the field structure of scalars, such as integers mod p.

## Method types

### Creation

- modulus:
- int:modulus:

### Identity

- hash
- isEqual:
- modulus
- intValue
- intValue:

### Addition

- zero
- isZero
- isOpposite:
- negate
- double
- add:
- subtract:

### Multiplication

- one
- minusOne
- isOne
- isMinusOne
- square
- multiply:
- inverse
- divide:

### Characteristic

- characteristic
- frobenius
- frobeniusInverse

### Printing

- printsLeadingSign
- printOn:

## Methods

### modulus:

> +modulus:(unsigned short)aPrime

Creates a new object, equal to zero, with modulus equal to aPrime. The modulus must be a prime number less than or equal to USHRT_MAX_PRIME.

### int:modulus:

> +int:(int)intValue modulus:(unsigned short)aPrime

Creates a new object with modulus equal to aPrime. The value of the object is equal to intValue mod aPrime. The modulus must be a prime number less than or equal to USHRT_MAX_PRIME.

### hash

> - (unsigned)hash

Returns a small integer that is the same for objects that are equal (in the sense of isEqual:).

### isEqual:

> - (BOOL)isEqual:b

### modulus

> - (unsigned short)modulus

Returns the modulus, a prime number equal to or less than USHRT_MAX_PRIME.

### intValue

> - (int)intValue

Returns a representant of the modular number in the range [0,modulus[.

### intValue:

> -intValue:(int)aValue

Returns a new object for aValue, modulo the modulus of the receiving object.

### zero

> -zero

### isZero

> - (BOOL)isZero

Whether the object is equal to zero.

### isOpposite:

> - (BOOL)isOpposite:b

Whether the object is the opposite of b.

### negate

> -negate

Returns the opposite of the object.

### double

> -double

Returns a new object, equal to the object multiplied by two i.e., added to itself.

### add:

> -add:b

Adds b to the object. Returns a new object.

### subtract:

> -subtract:b

Subtracts b from the object. Returns a new object.

### one

> -one

### minusOne

> -minusOne

### isOne

> - (BOOL)isOne

Whether the object is equal to one.

### isMinusOne

> - (BOOL)isMinusOne

Whether the object is equal to minus one.

### square

> -square

Returns the square of the object i.e., a new object equal to the original object multiplied by itself.

### multiply:

> -multiply:b

Returns a new object, the product of the object multiplied (to the right) by b. If the objects are pointer equal, this method is equivalent to square.

### inverse

> -inverse

Returns the multiplicative inverse of the object (returns a new object). Returns nil if the object is equal to zero or cannot be inverted.

### divide:

> -divide:b

Multiplies the object by the inverse of b. Returns nil if b is zero (has no inverse).

### characteristic

> - (int)characteristic

Returns the modulus of the object.

### frobenius

> -frobenius

Simply returns a new reference to the object itself, since the p-th power of an integer modulo p is equal to that integer.

### frobeniusInverse

> -frobeniusInverse

Simply returns a new reference to the object itself, since the p-th power of an integer modulo p is equal to that integer. This method also returns zero for the zero object.

### printsLeadingSign

> - (BOOL)printsLeadingSign

Returns NO, because representants are taken positive for printing.

### printOn:

> -printOn:(IOD)aFile

Prints a (nonnegative) representant of the integer modulo p.