Praktikum I Prof. Marcus Grote WS 05/06 Universität Basel Übung 9 (zu Maple) Aufgabe 1: Wir betrachten die Funktion π(x) := #{p prim | p ≤ x}. π(x) ist also die Anzahl der Primzahlen, die kleiner oder gleich x sind. Der Primzahlsatz, der 1896 von Hadamard und La Vallée-Poussin bewiesen wurde, besagt, dass π(x) x , d. h. lim x = 1. π(x) ∼ x→∞ ln(x) ln(x) Ausgehend von diesem Satz hat man die folgende Approximationsformel gefunden: π(x) ≃ x ln(x) − 1 Führe die Befehlsfolge unter Teil 1 (Primzahltest, Wertetabellen) auf dem Beilageblatt selbst in Maple aus. Löse anschliessend die folgenden Aufgaben mit Maple. Schreibe eine Prozedur, die die Werte von π(x) für x ∈ N in eine Liste schreibt. Benutze dazu den Befehl isprime. Diese Prozedur gibt also eine Wertetabelle der Funktion π aus. Erzeuge daraus eine Treppenfunktion, die für alle x ≥ 1 definiert ist. Zeichne die Funktion für x ∈ [0, 100] und x ∈ [0, 1000]. Benutze die Plot-Option numpoints, um die treppenförmige Struktur besser sichtbar zu machen. Zeichne die Funktion für x ∈ [0, 10000] und vergleiche sie mit der Approximationsformel. Aufgabe 2: Das ≪Sieb des Erastothenes≫ (manchmal auch Erastosthenes, 275–194 v. Chr.), ist ein Verfahren zum Auffinden aller Primzahlen bis zu einem vorgegebenen Wert n. Der Algorithmus funktioniert wie folgt: 1. Schreibe die Zahlen von 1 bis n. 2. 1 ist keine Primzahl. Streiche sie. 3. Finde die erste noch nicht überprüfte Zahl. Markiere sie als Primzahl. Streiche alle ganzzahligen Vielfachen dieser Zahl. Sie können keine Primzahlen sein. √ 4. Wiederhole 3. bis zu ⌊ n⌋. 5. Alle Zahlen, die jetzt nicht gestrichen sind, sind Primzahlen. Führe die Befehlsfolge unter Teil 2 (arrays, proc) auf dem Beilageblatt selbst in Maple aus. Löse anschliessend die folgenden Aufgaben mit Maple. a) Tippe die folgende Prozedur first ab. Sie nimmt ein array L, eine Zahl m und die Länge des arrays, n, als Eingabe und gibt denjenigen Index aus, bei dem m zum ersten Mal vorkommt. first:=proc(L,m,n) for i from 1 to n while L[i]<>m do end do: i: end proc: b) Schreibe eine Prozedur all_primes:=proc(n), die mit dem Sieb des Erastothenes alle Primzahlen von 1 bis n auflistet. Um Zahlen als ≪gestrichen≫ oder ≪markiert≫ zu kennzeichnen, kann man wie folgt vorgehen: Man erzeugt zu Beginn der Prozedur ein array L der Länge n, das mit Nullen gefüllt ist. Die Indizes der Einträge entsprechen den Zahlen von 1 bis n. Ist L[k]=0, so wurde die entsprechende Zahl k noch nicht überprüft. Um eine Zahl k zu streichen, setzt man z. B. L[k]:=99. Um eine Zahl k als Primzahl zu markieren, setzt man z. B. L[k]:=1. Nachdem der Algorithmus durchgelaufen ist, kann man durch das array durchgehen und alle Indizes k mit L[k]<>99 auflisten lassen (mit print). Allgemeine Informationen zum Praktikum und Übungsblätter befinden sich auf der Webseite http://www.math.unibas.ch/~grote/institut/vorlesungen/05ws/praktikumI