NAME
Math::GF::Zn - Elements for arithmetics over Zn
SYNOPSIS
use
Math::GF;
my
$field
= Math::GF->new(
order
=> 7);
# one is-a Math::GF::Zn because 7 is a prime
my
$one
=
$field
->multiplicative_neutral;
DESCRIPTION
This module implements elements and operations over a Galois Field based on primes. You are not supposed to generate instances of this class directly, but only through Math::GF (see "SYNOPSIS" above for an example).
OPERATORS
This module overrides some arithmetic and comparison operators, namely:
+ - * / **
== != eq
Additionally, the stringification operator ""
is overloaded too.
METHODS
In the following, $e
is supposed to be a Math::GF::Zn
object.
assert_compatibility
my
$n
=
$e
->assert_compatibility(
$other_element
);
Assert the compatibility of this object $e
with $other_element
. It is defined as follows:
$other_element
is-aMath::GF::Zn
$other_element
is based on the same field, i.e. it has the same "n" as$e
.
Throws an error if the conditions are not met.
Returns "n" (sparing you to call it if you need it). As this is a prime integer, it will always evaluate as true in Perl.
divided_by
my
$d
=
$e
->divided_by(
$other_element
);
Evaluate $e
divided by $other_element
. Calls "assert_compatibility". Used in the implementation of the /
overloaded operator.
equal_to
my
$bool
=
$e
->equal_to(
$other_element
);
Asses equality of $e
and $other_element
. Calls "assert_compatibility". Used in the implementation of the ==
and eq
overloaded operators.
field
my
$field
=
$e
->field;
Accessor for the field where this element belongs.
i
my
$i
=
$e
->i;
The reference value for the multiplicative inverse of this object.
inv
my
$inv
=
$e
->inv;
A Math::GF::Zn
element belonging to the same "field" that is the multiplicative inverse of this object.
minus
my
$difference
=
$e
->minus(
$other_element
);
Evaluate difference of $e
and $other_element
. Calls "assert_compatibility". Used in the implementation of the -
overloaded operator.
n
my
$n
=
$e
->n;
Prime integer at the base of Zn. Same as $e->field->order
.
not_equal_to
my
$bool
=
$e
->not_equal_to(
$other_element
);
Asses disequality of $e
and $other_element
. Calls "assert_compatibility". Used in the implementation of the !=
overloaded operator.
o
my
$i
=
$e
->o;
The reference value for the additive inverse (opposite) of this object.
opp
my
$opp
=
$e
->opp;
A Math::GF::Zn
element belonging to the same "field" that is the additive inverse of this object.
plus
my
$sum
=
$e
->plus(
$other_element
);
Evaluate sum of $e
and $other_element
. Calls "assert_compatibility". Used in the implementation of the +
overloaded operator.
stringify
my
$string
=
$e
->stringify;
Get a string representation of the object. It does just return "v". Used in the implementation of the ""
overloaded operator.
times
my
$prod
=
$e
->
times
(
$other_element
);
Evaluate product of $e
and $other_element
. Calls "assert_compatibility". Used in the implementation of the *
overloaded operator.
to_power
my
$pow
=
$e
->to_power(
$exp
);
Evaluate the power of $e
to $exp
. Used in the implementation of the **
overloaded operator.
v
my
$v
=
$e
->v;
A reference value for this object. In case of element of Zn, it is actually a meaningful integer value that can be used for operations modulo "n".
BUGS AND LIMITATIONS
Report bugs through GitHub (patches welcome).
SEE ALSO
AUTHOR
Flavio Poletti <polettix@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2017, 2018 by Flavio Poletti <polettix@cpan.org>
This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0.
This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.