############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Thomas Breuer. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the design of the rings $Z / n Z$ and their elements. ## ## The ordering of elements for nonprime $n$ is defined by the ordering of ## the representatives. ## For primes smaller than `MAXSIZE_GF_INTERNAL', the ordering of the ## internal finite field elements must be respected, for larger primes ## again the ordering of representatives is chosen. ##
############################################################################# ## #C IsZmodnZObj( <obj> ) #C IsZmodnZObjNonprime( <obj> ) #C IsZmodpZObj( <obj> ) #C IsZmodpZObjSmall( <obj> ) #C IsZmodpZObjLarge( <obj> ) ## ## <#GAPDoc Label="IsZmodnZObj"> ## <ManSection> ## <Filt Name="IsZmodnZObj" Arg='obj' Type='Category'/> ## <Filt Name="IsZmodnZObjNonprime" Arg='obj' Type='Category'/> ## <Filt Name="IsZmodpZObj" Arg='obj' Type='Category'/> ## <Filt Name="IsZmodpZObjSmall" Arg='obj' Type='Category'/> ## <Filt Name="IsZmodpZObjLarge" Arg='obj' Type='Category'/> ## ## <Description> ## The elements in the rings <M>Z / n Z</M> are in the category ## <Ref Filt="IsZmodnZObj"/>. ## If <M>n</M> is a prime then the elements are of course also in the ## category <Ref Filt="IsFFE"/>, ## otherwise they are in <Ref Filt="IsZmodnZObjNonprime"/>. ## <Ref Filt="IsZmodpZObj"/> is an abbreviation of ## <C>IsZmodnZObj and IsFFE</C>. ## This category is the disjoint union of <Ref Filt="IsZmodpZObjSmall"/> and ## <Ref Filt="IsZmodpZObjLarge"/>, the former containing all elements with ## <M>n</M> at most <C>MAXSIZE_GF_INTERNAL</C>. ## <P/> ## The reasons to distinguish the prime case from the nonprime case are ## <List> ## <Item> ## that objects in <Ref Filt="IsZmodnZObjNonprime"/> have an external ## representation (namely the residue in the range ## <M>[ 0, 1, \ldots, n-1 ]</M>), ## </Item> ## <Item> ## that the comparison of elements can be defined as comparison of the ## residues, and ## </Item> ## <Item> ## that the elements lie in a family of type ## <C>IsZmodnZObjNonprimeFamily</C> ## (note that for prime <M>n</M>, the family must be an ## <C>IsFFEFamily</C>). ## </Item> ## </List> ## <P/> ## The reasons to distinguish the small and the large case are ## that for small <M>n</M> the elements must be compatible with the internal ## representation of finite field elements, whereas we are free to define ## comparison as comparison of residues for large <M>n</M>. ## <P/> ## Note that we <E>cannot</E> claim that every finite field element of ## degree 1 is in <Ref Filt="IsZmodnZObj"/>, since finite field elements in ## internal representation may not know that they lie in the prime field. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareCategory( "IsZmodnZObj", IsScalar and IsAssociativeElement
and IsCommutativeElement and IsAdditivelyCommutativeElement );
DeclareCategory( "IsZmodnZObjNonprime", IsZmodnZObj );
DeclareSynonym( "IsZmodpZObj", IsZmodnZObj and IsFFE );
DeclareSynonym( "IsZmodpZObjSmall", IsZmodpZObj and IsLogOrderedFFE );
DeclareSynonym( "IsZmodpZObjLarge", IsZmodpZObj and IsLexOrderedFFE );
############################################################################# ## #M IsFinite( <R> ) . . . . . . . . . . . . . . . . method for full ring Z/nZ ##
InstallTrueMethod( IsFinite,
IsZmodnZObjNonprimeCollection and IsDuplicateFree );
############################################################################# ## #M IsEuclideanRing( <R> ) . . . . . . . . . . . . method for full ring Z/nZ ##
InstallTrueMethod(IsEuclideanRing, IsZmodnZObjNonprimeCollection and
IsWholeFamily and IsRing);
############################################################################# ## #V Z_MOD_NZ ## ## <ManSection> ## <Var Name="Z_MOD_NZ"/> ## ## <Description> ## is a list of length 2, the first containing at position <A>i</A> the ## <A>i</A>-th value <A>n</A> for that <C>ZmodnZ( <A>n</A> )</C> is stored, ## and the second containing this ring at position <A>i</A>. ## </Description> ## </ManSection> ##
BindGlobal( "Z_MOD_NZ", NEW_SORTED_CACHE(true) );
############################################################################# ## #F ZmodnZ( <n> ) #F ZmodpZ( <p> ) #F ZmodpZNC( <p> ) ## ## <#GAPDoc Label="ZmodnZ"> ## <ManSection> ## <Func Name="ZmodnZ" Arg='n'/> ## <Func Name="ZmodpZ" Arg='p'/> ## <Func Name="ZmodpZNC" Arg='p'/> ## ## <Description> ## <Ref Func="ZmodnZ"/> returns a ring <M>R</M> isomorphic to the residue ## class ring of the integers modulo the ideal generated by <A>n</A>. ## The element corresponding to the residue class of the integer <M>i</M> ## in this ring can be obtained by <C>i * One( R )</C>, ## and a representative of the residue class corresponding to the element ## <M>x \in R</M> can be computed by <C>Int</C><M>( x )</M>. ## <P/> ## <Index Subkey="Integers">mod</Index> ## <C>ZmodnZ( <A>n</A> )</C> is equal to <C>Integers mod <A>n</A></C>. ## <P/> ## <Ref Func="ZmodpZ"/> does the same if the argument <A>p</A> is a prime ## integer, additionally the result is a field. ## <Ref Func="ZmodpZNC"/> omits the check whether <A>p</A> is a prime. ## <P/> ## Each ring returned by these functions contains the whole family of its ## elements ## if <A>n</A> is not a prime, and is embedded into the family of finite ## field elements of characteristic <A>n</A> if <A>n</A> is a prime. ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareGlobalFunction( "ZmodnZ" );
DeclareGlobalFunction( "ZmodpZ" );
DeclareGlobalFunction( "ZmodpZNC" );
############################################################################# ## #O ZmodnZObj( <Fam>, <r> ) #O ZmodnZObj( <r>, <n> ) ## ## <#GAPDoc Label="ZmodnZObj"> ## <ManSection> ## <Oper Name="ZmodnZObj" ## Arg='Fam, r' Label="for a residue class family and integer"/> ## <Oper Name="ZmodnZObj" Arg='r, n' Label="for two integers"/> ## ## <Description> ## If the first argument is a residue class family <A>Fam</A> then ## <Ref Oper="ZmodnZObj" Label="for a residue class family and integer"/> ## returns the element in <A>Fam</A> whose coset is represented by the ## integer <A>r</A>. ## <P/> ## If the two arguments are an integer <A>r</A> and a positive integer ## <A>n</A> then <Ref Oper="ZmodnZObj" Label="for two integers"/> ## returns the element in <C>ZmodnZ( <A>n</A> )</C> ## (see <Ref Func="ZmodnZ"/>) whose coset is represented by the integer ## <A>r</A>. ## <P/> ## <Example><![CDATA[ ## gap> r:= ZmodnZ(15); ## (Integers mod 15) ## gap> fam:=ElementsFamily(FamilyObj(r));; ## gap> a:= ZmodnZObj(fam,9); ## ZmodnZObj( 9, 15 ) ## gap> a+a; ## ZmodnZObj( 3, 15 ) ## gap> Int(a+a); ## 3 ## ]]></Example> ## </Description> ## </ManSection> ## <#/GAPDoc> ##
DeclareOperation( "ZmodnZObj", [ IsZmodnZObjNonprimeFamily, IsInt ] );
DeclareOperation( "ZmodnZObj", [ IsInt, IsPosInt ] );
DeclareSynonym( "ZmodpZObj", ZmodnZObj );
############################################################################# ## #A ModulusOfZmodnZObj( <obj> ) ## ## <ManSection> ## <Attr Name="ModulusOfZmodnZObj" Arg='obj'/> ## ## <Description> ## For an element <A>obj</A> in a residue class ring of integers modulo ## <M>n</M> (see <Ref Filt="IsZmodnZObj"/>), ## <Ref Attr="ModulusOfZmodnZObj"/> returns the positive integer <M>n</M>. ## ## Deprecated, use <Ref Attr="Characteristic"/> instead. ## </Description> ## </ManSection> ##
DeclareAttribute( "ModulusOfZmodnZObj", IsZmodnZObj );
############################################################################# ## #M IsFinite( <zmodnz-mat-grp> ) ## ## *NOTE*: The following implication only holds if there are no infinite ## dimensional matrices. ##
InstallTrueMethod( IsFinite,
IsZmodnZObjNonprimeCollCollColl and IsRingElementCollCollColl
and IsGroup
and IsFinitelyGeneratedGroup );
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-10-13)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.