MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

Inhalt....: Vollkommene Zahlen 1

Kategorie.: Unterrichtsmaterial

Mathematik: Zahlentheorie

MuPAD.....: 3.1.0

Datum.....: 2006-10-24

Autoren...: August Barkhausen <abarkhausen@gmx.de>

Funktionen: for, min, sum, nops, numlib::primedivisors, testeq, matrix, print

Funktionen: Typeset

________________________________________________________________________________

 

Konstruktion vollkommener Zahlen und Test

von Zahlen auf Vollkommenheit mit Hilfe einer

Tabelle vollkommener Zahlen

 

Im folgenden wird ein Algorithmus zur Berechnung von geraden vollkommenen

Zahlen durchgeführt, der auf die in dem Buch "Elementare Zahlentheorie" von

Remmert und Ulrich, 2. Auflage Birkhäuser1995" angegebene Charakterisierung

gerader vollkommener Zahlen zurückgeht. Die Formulierung der Charakterisierung

der vollkommenen geraden Zahlen sowie die weiteren Informationen zu vollkommen

Zahlen sind ebenfalls dem Buch von Remmert und Ulrich  entnommen.

 

Mathematische Voraussetzungen sind neben Grundkenntnissen über elementare

Rechenregeln für reelle Zahlen und Primzahlen Programmierkenntnisse. Für die

Datenspeicherung werden Matrizen benutzt. Anderseits werden keine Grundkennt-

nisse über Rechenregeln für  Matrizen benötigt. Eine Kurzeinführung über die De-

finition von Matrizen und die Identifikation einzelner Elemente einer Matrix reicht

hier aus. Schließlich wird alternativ auch der Befehl print für die Datenausgabe be-

nutzt.

 

Aus mathematischer Sicht wesentliche Aspekte des Notebooks sind:

 

- Umgang mit Algorithmen

- Überprüfung mathematischer Voraussetzungen

- Anwendung von Beweistechniken

- Wiederholung bekannter mathematischer Begriffe

- Kennenlernen neuer mathematischer Begriffe

 

Aus programmiertechnischer Sicht wesentliche Aspekte des Notebooks sind:

 

- Programmiertechniken in MuPAD

- Datenein- und Ausgabe in MuPAD

 

Vollkommene Zahlen sind natürliche Zahlen, bei denen die Summe der Teiler doppelt so

groß ist, wie die Zahl selbst.

 

Beispiele:

Die Teiler von 6 sind 1, 2, 3 und 6. Für die Summe gilt: 1+2+3+6 = 12. Andererseits ist

12: 2 = 6. Die Zahl 6 ist damit vollkommen. Die Teiler von 28 sind 1, 2, 4, 7, 14 und 28.

Für die Summe gilt: 1 + 2 + 4 + 7 + 14 = 28 und andererseits 28:2 = 14. Die Zahl 28 ist

damit vollkommen. Die Eigenschaft einer Zahl, vollkommen zu sein,  ist nicht selbstver-

ständlich: Die Teiler von 12 beispielsweise sind 1, 2, 3, 4, 6, 12. Deren Summe ist 28

und die Hälfte von 28 ist 14. Die Zahl 12 ist damit nicht vollkommen.

 

Ob es ungerade vollkommene Zahlen gibt, ist nicht bekannt. Bekannt ist jedoch, dass es

keine ungeraden vollkommenen Zahlen a mit a < 10^50 gibt. (10 hoch 50).

 

Andererseits lassen sich alle geraden vollkommenen Zahlen angeben. Charakterisierung

der geraden vollkommenen Zahlen: Für eine natürliche gerade Zahl a = 2^(s-1)*b mit

s >=2, b ungerade sind äquivalent:

 

1) a ist vollkommen

2) b ist Primzahl und es gilt: b = 2^s-1

 

Das Notebook selbst setzt sich aus drei Teilen zusammen.

 

1) Die Konstruktion einer vollkommenen Zahl außerhalb einer Programmierlösung.

2) In einer Variation des Algorithmus zur Berechnung vollkommener Zahlen werden

    die Ergebnisse des Algorithmus zur Speicherung in eine Matrix geschrieben und

    anschließend auf Vollkommenheit überprüft. 

3) Durch Vergleich mit den vollkommenen Zahlen in der Tabelle/ Matrix wird über-

    prüft, inwieweit eine vorgegebene natürliche Zahl vollkommen ist. 

 

 

1. Teil

 

Konstruktion vollkommener Zahlen in Einzelschritten am Beispiel der vollkommem Zahl 6.

 

s:=2:

b:=2^s-1

math

Vorausgesetzt wurde, dass b Primzahl sein soll. Für b = 3 ist dies ohne weitere Rechnung

bekannt. In anderen Fällen kann dies jedoch nicht ohne weiteres vorausgesetzt werden.

Wenn eine Zahl b Primzahl ist, hat sie nur einen Primteiler. Die Anzahl der Primtteiler wird

durch den Befehl nops geliefert. 

Testergebnis:=testeq(nops(numlib::primedivisors(b))=1)

math

Bei dem Resultat TRUE ist b Primzahl, sonst nicht. Ist b Primzahl liefert der nächste

Schritt die vollkommene Zahl a. Ist b keine Primzahl ist die Zahl a unvollkommen, da

der Algorithmus alle geraden vollkommenen Zahlen charakterisiert.

 

a:=2^(s-1)*b:

if Testergebnis = TRUE

then

  a:=2^(s-1)*b:

  print(Typeset,

       "Vollkommene Zahl  : ".a);

else

  print(Typeset,"unvollkommene Zahl   : ".a);

end_if

math

Um andere vollkommene Zahlen zu erhalten ist oben ein anderer Wert für s zu wählen.

Wenn allerdings b keine Primzahl ist, ist die resultierende Zahl a nicht vollkommen.

 

 

2. Teil

 

Hier wird der Algorithmus ohne Berücksichtigung, ob die benötigten Exponenten s

Primzahlen sind durchlaufen. Das die potenziellen vollkommenen Zahlen a werden

berechnet. Anschließend wird überprüft. ob die Zwischenprodukte b Primzahlen sind

und damit die Zahlen a vollkommen sind. Die Ergebnisse werden in eine Matrix

geschrieben. 

 

Die Ausgabematrix wird definiert und die benötigten Variablen werden zurückgesetzt.

Die Variable Ende gibt die Anzahl der Iterationen und damit die Anzahl der Zeilen

der Ausgabematrix an.

 

Ende:=10:

Ausgabe:=matrix(Ende,3):

delete a,b,k:

 

Die potenziellen vollkommen Zahlen werden nach dem oben angegebenen Algorithmus

und in die zweite Spalte der Ausgabematrix geschrieben. In der ersten Spalte der Aus-

gabematrix erscheint die Zahlnummer. Anschließend wird entsprechend dem in Teil 1

angegebenen Verfahren überprüft, ob die ermittelte Zahl Primzahl ist. Das Ergebnis

wird in die dritte Spalte der Ausgabematrix geschrieben.

 

for k from 2 to Ende + 1 do

  b:=2^k-1;

  a:=2^(k-1)*b;

  Ausgabe[k-1,2]:=a;

  Ausgabe[k-1,1]:="Zahl Nr ".expr2text(k-1);

  Primzahltest:=testeq(nops(numlib::primedivisors(b))=1);

  if Primzahltest = TRUE

  then

    Ausgabe[k-1,3]:=vollkommen

  else

    Ausgabe[k-1,3]:=unvollkommen;      

  end_if;

end_for:

 

Ausgabe

math

3. Teil

Probe auf Vollkommenheit

 

Letztlich gibt es drei Methoden, eine Zahl auf Vollkommenheit zu überprüfen:

 

1) Man überprüft die Vollkommenheit anhand der Definition. Dies wird ein dem

    anderen Notebook zum Thema vollkommene Zahlen durchgeführt und hier nicht

    weiter verfolgt.

2) Man erstellt eine Tabelle gerader vollkommener Zahlen und vergleicht die Probezahl

    mit den Zahlen in der Tabelle. Kommt die Zahl in der Tabelle vor, ist sie vollkommen,

    kommt die Zahl nicht vor, ist sie unvollkommen. Vorausgesetzt wird bei dieser

    Methode, dass die Probezahl kleiner als die größte der vollkommenen Zahlen in der

    Tabelle ist. Gegebenenfalls muss die Tabelle vor der Überprüfung um weitere voll-

    kommene Zahlen ergänzt werden.  Bei ungeraden Zahlen überprüft man, ob die Zahl

    kleiner oder größer als 10^50 ist. Ist sie kleiner als 10^50 ist sie unvollkommen,

    sonst ist eine Aussage nicht möglich.

3) Man berechnet für eine gegebene gerade Probezahl die Variable b und überprüft,

    ob b Primzahl ist. Darüber hinaus überprüft man, ob s eine natürliche Zahl >= 2 ist.

 

Die Matrix für die Speicherung der Testergebnisse wird definiert. Ihre Zeilenzahl entspricht

der Anzahl der Iterationen. 

 

Testergebnis:=matrix(Ende,1):

 

Die Probezahl ist die Zahl, die auf Vollkommenheit untersucht werden soll.

 

Probezahl:=6:

 

Die vorher berechneten potenziell vollkommenen Zahlen werden einzeln auf Vollkommenheit

überprüft. Dazu wird überprüft, ob erstens die Zahl in der Tabelle vorkommt und zweitens,

ob die Zahl vollkommen ist. Die Ergebnisse werden in die Testmatrix geschrieben.

 

for k from 1 to Ende do

  a:=Ausgabe[k,2]:

  b:=Ausgabe[k,3]:

  Testergebnis[k,1]:=testeq(a=Probezahl)and

                     testeq(b=vollkommen)

 

end_for:

 

Die Testmatrix wird ausgegeben

 

Testergebnis

math

Die Einzelergebnisse werden zu einer Gesamtaussage zusammengefasst. 

 

Gesamttestergebnis:=Testergebnis[1,1]:

for k from 2 to Ende do

  Gesamttestergebnis :=Testergebnis[k,1]

                      or Gesamttestergebnis:

 

 

end_for:

 

Die Überprüfung liefert nur vollkommene Zahlen, wenn diese in der Tabelle vorkommen.

Insofern werden nur vollkommene Zahlen erfasst, die kleinergleich der größten in der Tabelle

vorkommenden vollkommenen Zahl sind. Das Gesamtergebnis der Überprüfung wird um

einen entsprechenden Check ergänzt und ausgegeben.

 

if Ausgabe[Ende,2] >= Probezahl

then

  if Gesamttestergebnis = TRUE

  then

    print("die Zahl  ".expr2text(Probezahl)." ist eine vollkommene Zahl")

  else

    print("die Zahl  ".expr2text(Probezahl)." ist keine vollkommene Zahl")

  end_if

else

  print("Die Probezahl ist größer als die größte berechnete Zahl");

  print("Eine Aussage über die Vollkommenheit ist daher nicht möglich")

end_if

"die Zahl  6 ist eine vollkommene Zahl"

 

Anschlussprobleme und offene Punkte:

 

1) Es sollte verhindert werden, dass andere als natürliche Zahlen zur Überprüfung auf

    Vollkommenheit zugelassen werden.

 

2) Es sollte sichergestellt werden, dass für s nur natürliche Zahlen im Algorithmus

    berücksichtigt werden können. 

 

3) Ungerade Zahlen werden in der Überprüfung auf Vollkommenheit durch Vergleich

    mit den Werten in der Tabelle automatisch als nicht vollkommen erkannt. Dies

    Ergebnis ist jedoch nur für ungerade Zahlen < 10^50 richtig. Es ist nicht bekannt,

    ob es größere ungerade vollkommene Zahlen gibt, die größer als 10^50 sind. Das

    Notebook um eine entsprechende Überprüfung ergänzt werden. 

 

4) In der Überprüfung auf Vollkommenheit scheint eine  Redundanz zu sein. Einerseits

    wird überprüft, ob die Zahl in der Tabelle vorkommt und zusätzlich wird überprüft,

    ob diese Zahl vollkommen ist. Es sollte geklärt werden, welche Auswirkungen auf-

    treten, wenn man je einen Teil der Doppelabfrage entfernt.

______________________________________________________________________________

 

Anmerkung:

 

1. Darstellungen des gewählten Algorithmus finden sich in vielen Büchern zur Zahlentheorie. Das vorliegende

    Notebook bezieht sich auf die Darstellung in Remmert, Ulrich: "Elementare Zahlentheorie", 2. Auflage

    Birkhäuser 1995. 

 

2. Lösungen von Programmierproblemen im Rahmen der linearen Algebra und Analysis finden sich in weiteren

    Notebooks des gleichen Autors.

 

3. In einem weiteren Notebook des Autors wird ein Algorithmus zur Berechnung von Primzahlen durchgeführt

    und ausgewertet.

 

4. In einem weiteren Notebook des Autors wird eine weitere Möglichkeit zur Überprüfung einer Zahl auf

    Vollkommenheit durchgeführt.

 

5. Weitere Aspekte der Anwendung von MuPAD auf die Zahlentheorie finden sich in zwei Notebooks des

    gleichen Autors, die sich mit vollkommenen Zahlen beschäftigen.

 

6.  Weitere Anregungen finden Sie in der Unterrichsmaterialsammlung unter schule.mupad.de. In diesen

     Notebooks werden eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD Pro gelöst.

 

______________________________________________________________________________

 

 

 

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.