Definition  eigener Prozeduren im Package zahltheo

Prof. Dr. Dörte Haftendorn, Mathematik mit MuPAD 4.02, (in3.11 Sept. 05) Feb.07

http://haftendorn.uni-lueneburg.de             www.mathematik-verstehen.de

####################################################################

verwendet auch  im TI92/Voyage

Es ist gut möglich, die Prozeduren hier in MuPAD zu entwickeln und auszutesten und

sie dann erst für der TI umzuschreiben.

 

1. ggtex(a,b)  erweiterter Euklidischer Algorithmus mit vollständiger Textausgabe

                           Rückgabe   [ggt,s,t]

2.    ggte(a,b)  erweiterter Euklidischer Algorithmus ohne  Textausgabe

                           Rückgabe   [ggt,s,t]

3.    ggt(a,b)      Euklidischer Algorithmus     Rückgabe      zahl

4.    teiler(a)       Liste der Teiler von  a

5.    zstern(n)     die Liste der zu n Teilerfremden, also Zm*

5a.   ordo(a,m)  Ordnung des Elementes a in Zm*

Zusatz: Potenztafeln

____________________________________________________

6.   Umwandlungen Extraseite

7.   powermod         Extraseite

*************************************************************************************************************

//  zahltheo- Package

// Zahlenteoretische Ergänzungen

// Dörte Haftendorn  September 05 und Feb. 07

//#######################################

// ggtex(a,b)  erweiterter Euklidischer Algorithmus mit vollständiger Textausgabe

ggtex:=

proc(a: Type::Integer,b:Type::Integer)

           local r0,r1,r2,q0,s0,s1,s2,t0,t1,t2;

           begin

              r0:=a:  r1:=b: q0:=a div b: s0:=1: s1:=0: t0:=0: t1:=1:

              repeat

                r2:=r0 mod r1:   

                if r2=0 then

                  print(Unquoted,"ggT(".a.",".b.")= ".r1.

                  "       VSD  ".r1."= ".s1."*".a."+ (".t1.")*".b);

                  return([r1,s1,t1]);

                end_if;

                q0:= r0 div r1: s2:=s0-q0*s1:  t2:=t0-q0*t1:

                print(Unquoted,

" ".r0."=".q0."*".r1."+".r2." und es ist  VSD  ".r2."= ".s2."*".a."+ (".t2.")*".b);

                r0:=r1:   r1:=r2: s0:=s1:  t0:=t1:  s1:=s2:   t1:=t2:

                /*alle eine Nummer herunterzählen */

              until 3=5 end_repeat;

           end_proc:

ggtex(342,99)

342=3*99+45 und es ist  VSD  45= 1*342+ (-3)*99

99=2*45+9 und es ist  VSD  9= -2*342+ (7)*99

ggT(342,99)= 9       VSD  9= -2*342+ (7)*99

math

ggtex(297,99)

ggT(297,99)= 99       VSD  99= 0*297+ (1)*99

math

Nun als Funktion oder Textausgabe

ggte:=

proc(a: Type::Integer,b:Type::Integer)

           local r0,r1,r2,q0,s0,s1,s2,t0,t1,t2;

           begin

              r0:=a:  r1:=b: q0:=a div b: s0:=1: s1:=0: t0:=0: t1:=1:

              repeat

                r2:=r0 mod r1:   

                if r2=0 then

                  return([r1,s1,t1]);

                end_if;

                q0:= r0 div r1: s2:=s0-q0*s1:  t2:=t0-q0*t1:

                  r0:=r1:   r1:=r2: s0:=s1:  t0:=t1:  s1:=s2:   t1:=t2:

                /*alle eine Nummer herunterzählen */

              until 3=5 end_repeat;

           end_proc:

ggte(65,26)

math

***************************************************************************************************

//zahltheo- Package

// Zahlenteoretische Ergänzungen

// Dörte Haftendorn  September 05

//#######################################

//ggt(a,b)  Euklidischer Algorithmus

ggt:=

proc(a: Type::Integer,b:Type::Integer)

           local r0,r1,r2,q0,q1;

           begin

              r0:=a:  r1:=b:

              repeat

                r2:=r0 mod r1: 

                if r2=0 then  return(r1)

                  end_if;

                q0:= r0 div r1:

                q1:= r1 div r2:

                r0:=r1: r1:=r2: q0:=q1:

                /*alle eine Nummer herunterzählen */

              until r2=0 end_repeat;

           end_proc:

ggt(56,36 )

math

################################################################

//zahltheo- Package

// Zahlenteoretische Ergänzungen

// Dörte Haftendorn  September 05

//#######################################

//   teiler(a) 

teiler:=proc(a)

          local i,t;

          begin

            t:=[]:           

            for i from 1 to floor(sqrt(a)) do

              if modp(a,i)=0 then

                 t:=append(t,i,a/i)

              end_if:

            end_for:

            return(t):

         end_proc:

 

teiler(100)

math

Man kann hier die Teilerpaare sehen.

 

******************************************************************************************************

 

################################################################

//zahltheo- Package

// Zahlenteoretische Ergänzungen

// Dörte Haftendorn  September 05

//#######################################

//   zstern(n)     die Liste der zu n Teilerfremden

zstern:=proc(n: Type::Integer)

        local i,liste;

        begin

           liste:=[]:

           for i from 1 to n  do

              if gcd(n,i)=1 then liste:=liste.[i]

              end_if:

           end_for:

           return (liste);

        end_proc:

zstern(27)

math

ordo:=proc(a: Type::Integer,m: Type::Integer)

       local ordnung, pot;

       begin

         ordnung:=1: pot:=modp(a,m):

         if gcd(a,m)>1 then return("".a." nicht teilerfremd zu ".m); end_if;

         while pot>1 do

           pot:=modp(pot*a,m): ordnung:=ordnung+1

         end_while;

         if pot=1 then return( ordnung); end_if;

       end_proc: 

ordo(5,17)

math

5^k mod 17 $ k=1..16

math

ordo(9,17)

math

9^k mod 17 $ k=1..16

math

Entdecken kann man die Ordnung an den Potenztafeln

potenzTafelListe:=proc(liste,m,n)

               local i,k;

               begin

                 print(liste, " Potenzen modulo ".m);

                 matrix([i $ i=1..n]),

                 matrix([[k^i mod m $ k in liste] $ i=1..n]);

               end_proc:

potenzTafelListe([3,7,9],10,8)

[3, 7, 9], " Potenzen modulo 10"

math

Man kann die zstern direkt einsetzen:

m:=15:

potenzTafelListe(zstern(m),m,nops(zstern(m)))

[1, 2, 4, 7, 8, 11, 13, 14], " Potenzen modulo 15"

math

##########################################################################

Umwandlungen auf Extraseite

1.    textToZahl (w)    Umwandlung mit Ascii direkt 

2.   zahlToText(w)     Umwandlung mit Ascii direkt

3.   txToZoo(w)    Umwandlung  Text in Zahl, je Buchstabe 2 Ziffern

4.   zooToTx(z)     Umwandlung  Zahl in Text, je Buchstabe 2 Ziffern

5.  caesar(k,w)     Cäsarverschlüsselung Verschiebung um k

6.  raseac(k,wz)     Inverse dazu

 

Powermod auf Extraseite