Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  zmodnz.tst   Sprache: unbekannt

 
Spracherkennung für: .tst vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#@local A,Fam7,Fam8,Famp,G,R,enum,l,len,m,m2,m3,m4,one,p
#@local rings,x,z0,z1,z2,z3,i,a,b,y
gap> START_TEST("zmodnz.tst");

#
# ZmodnZ constructor
#
gap> ZmodnZ(4);
(Integers mod 4)
gap> ZmodnZ(-4);
(Integers mod 4)
gap> ZmodnZ(1);
(Integers mod 1)
gap> ZmodnZ(2);
GF(2)
gap> ZmodnZ(0);
Integers
gap> ZmodnZ(-1/2);
Error, <n> must be an integer

#
# ZmodpZ constructor
#
gap> ZmodpZ(2);
GF(2)
gap> ZmodpZ(-3);
GF(3)
gap> ZmodpZ(4);
Error, <p> must be a prime

#
# small prime field
#
gap> Fam7:= ElementsFamily( FamilyObj( Integers mod 7 ) );;
gap> z0:= ZmodnZObj( Fam7, 0 );
ZmodpZObj( 07 )
gap> z1:= ZmodnZObj( Fam7, -3 );
ZmodpZObj( 47 )
gap> z2:= ZmodnZObj( Fam7,  1 );
ZmodpZObj( 17 )
gap> z3:= ZmodnZObj( Fam7, 10 );
ZmodpZObj( 37 )
gap> z1 = z2; z2 = z3;
false
false
gap> z1 < z2; z1 < z3; z2 < z3; z2 < z1; z3 < z1; z3 < z2;
false
false
true
true
true
false
gap> z1 = Zero( GF(7) ); z2 = Z(7); Zero( GF(7) ) = z1; Z(7) = z2;
false
false
false
false
gap> z2 < Z(7); Z(7) < z2;
true
false
gap> z0 < z1; z1 < z0;  z0 = Zero( GF(7) ); 
true
false
true
gap> Print(SSortedList( [ Z(7)^3, Z(7)^2, z1, z2, z3, Z(7)^5 ] ),"\n");
[ ZmodpZObj( 17 ), ZmodpZObj( 37 ), Z(7)^2, Z(7)^3, ZmodpZObj( 47 ), 
  Z(7)^5 ]
gap> z1 + z2; z1 + z3; z2 + z3; z1 + 12 + z2; z1 + Z(7); Z(7)^2 + z2;
ZmodpZObj( 57 )
ZmodpZObj( 07 )
ZmodpZObj( 47 )
ZmodpZObj( 57 )
ZmodpZObj( 37 )
0*Z(7)
Z(7)
gap> z1 - z2; z1 - z3; z2 - z3; z1 - 12 - z2; z1 - Z(7); Z(7)^2 - z2;
ZmodpZObj( 37 )
ZmodpZObj( 17 )
ZmodpZObj( 57 )
ZmodpZObj( 37 )
ZmodpZObj( 17 )
Z(7)^0
Z(7)^0
gap> z1 * z2; z1 * z3; z2 * z3; z1 * 12 * z2; z1 * Z(7); Z(7)^2 * z2;
ZmodpZObj( 47 )
ZmodpZObj( 57 )
ZmodpZObj( 37 )
ZmodpZObj( 47 )
ZmodpZObj( 27 )
Z(7)^5
Z(7)^2
gap> z1 / z2; z1 / z3; z2 / z3; z1 / 12 / z2; z1 / Z(7); Z(7)^2 / z2;
ZmodpZObj( 47 )
ZmodpZObj( 67 )
ZmodpZObj( 57 )
ZmodpZObj( 47 )
ZmodpZObj( 27 )
Z(7)^3
Z(7)^2
gap> z2^3; z2^(-2); z2^0;
ZmodpZObj( 17 )
ZmodpZObj( 17 )
ZmodpZObj( 17 )
gap> DegreeFFE( z1 ); DegreeFFE( z2 ); DegreeFFE( z3 );
1
1
1
gap> Int( z1 ); Int( z2 ); Int( z3 ); Int( z2 ) = Int( Z(7)^6 );
4
1
3
true
gap> SquareRoots( GF(7), z1 );
[ ZmodpZObj( 27 ), ZmodpZObj( 57 ) ]
gap> SquareRoots( GF(7), z2 );
[ ZmodpZObj( 17 ), ZmodpZObj( 67 ) ]
gap> SquareRoots( GF(7), z3 );
[  ]
gap> LogFFE(z1,z2); LogFFE(z1,z3);
fail
4
gap> LogFFE(z2,z1); LogFFE(z3,z1);
0
fail
gap> RootFFE(z1, 2); RootFFE(z1, 3);
ZmodpZObj( 27 )
fail
gap> RootFFE(5, z1, 2);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `LogFFE' on 2 arguments
gap> ModulusOfZmodnZObj( z1 ); ModulusOfZmodnZObj( Z(7) ); ModulusOfZmodnZObj( Z(7^2) );
7
7
fail
gap> DefaultRingByGenerators( [ z1 ] );
GF(7)

#
# large prime field
#
gap> p:= NextPrimeInt( MAXSIZE_GF_INTERNAL );
65537
gap> Famp:= ElementsFamily( FamilyObj( Integers mod p ) );;
gap> z1:= ZmodnZObj( Famp, -3 );
ZmodpZObj( 6553465537 )
gap> z2:= ZmodnZObj( Famp,  1 );
ZmodpZObj( 165537 )
gap> z3:= ZmodnZObj( Famp, 10 );
ZmodpZObj( 1065537 )
gap> z1 = z2; z2 = z3;
false
false
gap> z1 < z2; z1 < z3; z2 < z3; z2 < z1; z3 < z1; z3 < z2;
false
false
true
true
true
false
gap> z1 = Zero( GF(p) ); Zero( GF(p) ) = z1;
false
false
gap> z1 + z2; z1 + z3; z2 + z3; z1 + 12 + z2;
ZmodpZObj( 6553565537 )
ZmodpZObj( 765537 )
ZmodpZObj( 1165537 )
ZmodpZObj( 6553565537 )
ZmodpZObj( 365537 )
gap> z1 - z2; z1 - z3; z2 - z3; z1 - 12 - z2;
ZmodpZObj( 6553365537 )
ZmodpZObj( 6552465537 )
ZmodpZObj( 6552865537 )
ZmodpZObj( 6553365537 )
ZmodpZObj( 165537 )
gap> z1 * z2; z1 * z3; z2 * z3; z1 * 12 * z2;
ZmodpZObj( 6553465537 )
ZmodpZObj( 6550765537 )
ZmodpZObj( 1065537 )
ZmodpZObj( 6553465537 )
ZmodpZObj( 265537 )
gap> z1 / z2; z1 / z3; z2 / z3; z1 / 12 / z2;
ZmodpZObj( 6553465537 )
ZmodpZObj( 5898365537 )
ZmodpZObj( 4587665537 )
ZmodpZObj( 6553465537 )
ZmodpZObj( 265537 )
gap> z2^3; z2^(-2); z2^0;
ZmodpZObj( 165537 )
ZmodpZObj( 165537 )
ZmodpZObj( 165537 )
gap> DegreeFFE( z1 ); DegreeFFE( z2 ); DegreeFFE( z3 );
1
1
1
gap> Int( z1 ); Int( z2 ); Int( z3 );
65534
1
10
gap> SquareRoots( GF(p), z1 );
[  ]
gap> SquareRoots( GF(p), z2 );
[ ZmodpZObj( 165537 ), ZmodpZObj( 6553665537 ) ]
gap> SquareRoots( GF(p), z3 );
[  ]
gap> ModulusOfZmodnZObj( z1 );
65537
gap> DefaultRingByGenerators( [ z1 ] );
GF(65537)

#
# ring that is not a field
#
gap> Fam8:= ElementsFamily( FamilyObj( Integers mod 8 ) );;
gap> z1:= ObjByExtRep( Fam8, -3 ); ExtRepOfObj( z1 );
ZmodnZObj( 58 )
5
gap> z2:= ObjByExtRep( Fam8,  1 ); ExtRepOfObj( z2 );
ZmodnZObj( 18 )
1
gap> z3:= ObjByExtRep( Fam8,  3 ); ExtRepOfObj( z3 );
ZmodnZObj( 38 )
3
gap> z1 = z2; z2 = z3;
false
false
gap> z1 < z2; z1 < z3; z2 < z3; z2 < z1; z3 < z1; z3 < z2;
false
false
true
true
true
false
gap> z1 + z2; z1 + z3; z2 + z3; z1 + 12 + z2;
ZmodnZObj( 68 )
ZmodnZObj( 08 )
ZmodnZObj( 48 )
ZmodnZObj( 68 )
ZmodnZObj( 38 )
gap> z1 - z2; z1 - z3; z2 - z3; z1 - 12 - z2;
ZmodnZObj( 48 )
ZmodnZObj( 28 )
ZmodnZObj( 68 )
ZmodnZObj( 48 )
ZmodnZObj( 18 )
gap> z1 * z2; z1 * z3; z2 * z3; z1 * 12 * z2;
ZmodnZObj( 58 )
ZmodnZObj( 78 )
ZmodnZObj( 38 )
ZmodnZObj( 58 )
ZmodnZObj( 28 )
gap> z1 / z2; z1 / z3; z2 / z3; z1 / 12 / z2;
ZmodnZObj( 58 )
ZmodnZObj( 78 )
ZmodnZObj( 38 )
ZmodnZObj( 58 )
ZmodnZObj( 28 )
gap> 1/2 + z1; z1 + 1/21/3 + z1; z1 + 1/3;
fail
fail
ZmodnZObj( 08 )
ZmodnZObj( 08 )
gap> 1/2 - z1; z1 - 1/21/3 - z1; z1 - 1/3;
fail
fail
ZmodnZObj( 68 )
ZmodnZObj( 28 )
gap> 1/2 * z1; z1 * (1/2); 1/3 * z1; z1 * (1/3);
fail
fail
ZmodnZObj( 78 )
ZmodnZObj( 78 )
gap> 1/2 / z1; z1 / (1/2); 1/3 / z1; z1 / (1/3);
fail
ZmodnZObj( 28 )
ZmodnZObj( 78 )
ZmodnZObj( 78 )
gap> z2^3; z2^(-2); z2^0;
ZmodnZObj( 18 )
ZmodnZObj( 18 )
ZmodnZObj( 18 )
gap> Int( z1 ); Int( z2 ); Int( z3 );
5
1
3
gap> IntFFESymm( z1 ); IntFFESymm( z2 ); IntFFESymm( z3 );
-3
1
3
gap> Order( z1 ); Order( z2 ); Order(z3);
2
1
2
gap> Order( z1 + z1 );
Error, <obj> is not invertible
gap> IsUnit(z1); IsUnit(2 * z1);
true
false
gap> ModulusOfZmodnZObj( z1 );
8
gap> DefaultRingByGenerators( [ z1 ] );
(Integers mod 8)

#
# quotients in rings with zero divisors
#
gap> R:=Integers mod 6;
(Integers mod 6)

#
gap> ZmodnZObj(2,6) / ZmodnZObj(4,6);
ZmodnZObj( 26 )
gap> Quotient(R, ZmodnZObj(2,6), ZmodnZObj(4,6));
ZmodnZObj( 26 )
gap> ZmodnZObj(4,6) / ZmodnZObj(2,6);
ZmodnZObj( 26 )
gap> Quotient(R, ZmodnZObj(4,6), ZmodnZObj(2,6));
ZmodnZObj( 26 )

#
gap> ZmodnZObj(2,6) / ZmodnZObj(5,6);
ZmodnZObj( 46 )
gap> Quotient(R, ZmodnZObj(2,6), ZmodnZObj(5,6));
ZmodnZObj( 46 )
gap> ZmodnZObj(5,6) / ZmodnZObj(2,6);
Error, invalid division
gap> Quotient(R, ZmodnZObj(5,6), ZmodnZObj(2,6));
fail

#
gap> ZmodnZObj(4,6) / ZmodnZObj(2,6);
ZmodnZObj( 26 )
gap> Quotient(R, ZmodnZObj(0,6), ZmodnZObj(2,6));
ZmodnZObj( 06 )
gap> ZmodnZObj(2,6) / ZmodnZObj(0,6);
Error, invalid division
gap> Quotient(R, ZmodnZObj(2,6), ZmodnZObj(0,6));
fail

#
# enumerator
#
gap> enum:= Enumerator( Integers mod 9 );
<enumerator of (Integers mod 9)>
gap> len:= Length( enum );
9
gap> l:= [];;
gap> for i in [ 1 .. len ] do
>      l[i]:= enum[i];
>    od;
gap> Print(l,"\n");
[ ZmodnZObj( 09 ), ZmodnZObj( 19 ), ZmodnZObj( 29 ), ZmodnZObj( 39 ), 
  ZmodnZObj( 49 ), ZmodnZObj( 59 ), ZmodnZObj( 69 ), ZmodnZObj( 79 ), 
  ZmodnZObj( 89 ) ]
gap> ForAll( [ 1 .. len ], i -> i = Position( enum, enum[i], 0 ) );
true
gap> Print(String(l), "\n");
[ ZmodnZObj(0,9), ZmodnZObj(1,9), ZmodnZObj(2,9), ZmodnZObj(3,9), ZmodnZObj(4,\
9), ZmodnZObj(5,9), ZmodnZObj(6,9), ZmodnZObj(7,9), ZmodnZObj(8,9) ]
gap> enum[10];
Error, <enum>[10] must have an assigned value
gap> enum[10];
Error, <enum>[10] must have an assigned value

#
# work with domains
#
gap> rings:= List( [ 234689 ], i -> Integers mod i );
[ GF(2), GF(3), (Integers mod 4), (Integers mod 6), (Integers mod 8), 
  (Integers mod 9) ]
gap> Print(List( rings, AsList ),"\n");
[ [ 0*Z(2), Z(2)^0 ], [ 0*Z(3), Z(3)^0, Z(3) ], 
  [ ZmodnZObj( 04 ), ZmodnZObj( 14 ), ZmodnZObj( 24 ), 
      ZmodnZObj( 34 ) ], 
  [ ZmodnZObj( 06 ), ZmodnZObj( 16 ), ZmodnZObj( 26 ), 
      ZmodnZObj( 36 ), ZmodnZObj( 46 ), ZmodnZObj( 56 ) ], 
  [ ZmodnZObj( 08 ), ZmodnZObj( 18 ), ZmodnZObj( 28 ), 
      ZmodnZObj( 38 ), ZmodnZObj( 48 ), ZmodnZObj( 58 ), 
      ZmodnZObj( 68 ), ZmodnZObj( 78 ) ], 
  [ ZmodnZObj( 09 ), ZmodnZObj( 19 ), ZmodnZObj( 29 ), 
      ZmodnZObj( 39 ), ZmodnZObj( 49 ), ZmodnZObj( 59 ), 
      ZmodnZObj( 69 ), ZmodnZObj( 79 ), ZmodnZObj( 89 ) ] ]
gap> Print(List( rings, AsSSortedList ),"\n");
[ [ 0*Z(2), Z(2)^0 ], [ 0*Z(3), Z(3)^0, Z(3) ], 
  [ ZmodnZObj( 04 ), ZmodnZObj( 14 ), ZmodnZObj( 24 ), 
      ZmodnZObj( 34 ) ], 
  [ ZmodnZObj( 06 ), ZmodnZObj( 16 ), ZmodnZObj( 26 ), 
      ZmodnZObj( 36 ), ZmodnZObj( 46 ), ZmodnZObj( 56 ) ], 
  [ ZmodnZObj( 08 ), ZmodnZObj( 18 ), ZmodnZObj( 28 ), 
      ZmodnZObj( 38 ), ZmodnZObj( 48 ), ZmodnZObj( 58 ), 
      ZmodnZObj( 68 ), ZmodnZObj( 78 ) ], 
  [ ZmodnZObj( 09 ), ZmodnZObj( 19 ), ZmodnZObj( 29 ), 
      ZmodnZObj( 39 ), ZmodnZObj( 49 ), ZmodnZObj( 59 ), 
      ZmodnZObj( 69 ), ZmodnZObj( 79 ), ZmodnZObj( 89 ) ] ]
gap> List( [ 1 .. Length( rings ) ], i -> Random( rings[i] ) in rings[i] );
[ true, true, true, true, true, true ]
gap> List( rings, Size );
234689 ]
gap> Print(List( rings, Units ),"\n");
[ Group( [ Z(2)^0 ] ), Group( [ Z(3) ] ), Group( [ ZmodnZObj( 34 ) ] ), 
  Group( [ ZmodnZObj( 56 ) ] ), 
  Group( [ ZmodnZObj( 78 ), ZmodnZObj( 58 ) ] ), 
  Group( [ ZmodnZObj( 29 ) ] ) ]
gap> List(rings, r -> One(r) in Units(r));
[ true, true, true, true, true, true ]
gap> List(rings, r -> 2*One(r) in Units(r));
[ false, true, false, false, false, true ]
gap> List(rings, r -> 3*One(r) in Units(r));
[ true, false, true, false, true, false ]

# arithmetic operations with matrices over residue class rings
# (From time to time, solved problems come up again because clever methods
# for matrices assume too much about the domains of their entries ...)
gap> R:= Integers mod 6;
(Integers mod 6)
gap> Print(R, "\n");
(Integers mod 6)
gap> A:= MatrixAlgebra( R, 2 );;
gap> one:= One( A );
[ [ ZmodnZObj( 16 ), ZmodnZObj( 06 ) ], 
  [ ZmodnZObj( 06 ), ZmodnZObj( 16 ) ] ]
gap> G:= GroupWithGenerators( [ one ] );;
gap> One( G );;
gap> m:=[[4,1],[1,5]] * ZmodnZObj(1,6);;
gap> m in A;
true

# should there be a method? m and elements in G have different representations
#gap> m in G;
#false
gap> m2 := Inverse(m);
[ [ ZmodnZObj( 56 ), ZmodnZObj( 56 ) ], 
  [ ZmodnZObj( 56 ), ZmodnZObj( 46 ) ] ]
gap> IsOne( m * m2 ); IsOne( m2 * m );
true
true
gap> m3 := InverseSameMutability(m); IsMutable(m3);
[ [ ZmodnZObj( 56 ), ZmodnZObj( 56 ) ], 
  [ ZmodnZObj( 56 ), ZmodnZObj( 46 ) ] ]
true
gap> m4 := InverseSameMutability(Immutable(m)); IsMutable(m4);
[ [ ZmodnZObj( 56 ), ZmodnZObj( 56 ) ], 
  [ ZmodnZObj( 56 ), ZmodnZObj( 46 ) ] ]
false

#
gap> R:=Integers mod (2^127-1);
GF(170141183460469231731687303715884105727)
gap> x:=One(R)*3^67;
ZmodpZObj( 92709463147897837085761925410587
170141183460469231731687303715884105727 )
gap> Display([[x,x],[x,x]]);
ZmodnZ matrix:
[ [  92709463147897837085761925410587,  92709463147897837085761925410587 ],
  [  92709463147897837085761925410587,  92709463147897837085761925410587 ] ]
modulo 170141183460469231731687303715884105727
gap> R:=Integers mod 2^127;
(Integers mod 170141183460469231731687303715884105728)
gap> x:=One(R)*3^67;
ZmodnZObj( 92709463147897837085761925410587
170141183460469231731687303715884105728 )
gap> Display([[x,x],[x,x]]);
matrix over Integers mod 170141183460469231731687303715884105728:
[ [  92709463147897837085761925410587,  92709463147897837085761925410587 ],
  [  92709463147897837085761925410587,  92709463147897837085761925410587 ] ]

# test the methods for Random
gap> R := Integers mod 10;;
gap> Random(R);
ZmodnZObj( 410 )
gap> Random(GlobalRandomSource, R);
ZmodnZObj( 910 )

# test some additional quotients
gap> a:=ZmodnZObj(26);; b:=ZmodnZObj(46);;
gap> b/a;
ZmodnZObj( 26 )
gap> a/b;
ZmodnZObj( 26 )

#
gap> x := ZmodnZObj(2,10);
ZmodnZObj( 210 )
gap> y := ZmodnZObj(0,10);
ZmodnZObj( 010 )
gap> x/y;
Error, invalid division
gap> y/x;
ZmodnZObj( 010 )
gap> 0/x;
ZmodnZObj( 010 )
gap> x/0;
Error, invalid division
gap> x/3;
ZmodnZObj( 410 )
gap> 3/x;
Error, invalid division
gap> y/3;
ZmodnZObj( 010 )
gap> 3/y;
Error, invalid division

#
gap> R := Integers mod 4;;
gap> List(Elements(R), x -> Int(StandardAssociate(R, x)));
0121 ]
gap> List(Elements(R), x -> Int(StandardAssociateUnit(R, x)));
1113 ]

#
gap> R := Integers mod 5;;
gap> List(Elements(R), x -> Int(StandardAssociate(R, x)));
01111 ]
gap> List(Elements(R), x -> Int(StandardAssociateUnit(R, x)));
11342 ]

#
gap> R := Integers mod 6;;
gap> List(Elements(R), x -> Int(StandardAssociate(R, x)));
012321 ]
gap> List(Elements(R), x -> Int(StandardAssociateUnit(R, x)));
111155 ]

#
gap> R := Integers mod 9;;
gap> List(Elements(R), x -> Int(StandardAssociate(R, x)));
011311311 ]
gap> List(Elements(R), x -> Int(StandardAssociateUnit(R, x)));
115172548 ]

#
gap> STOP_TEST("zmodnz.tst");

[Dauer der Verarbeitung: 0.14 Sekunden, vorverarbeitet 2026-06-08]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik