Ubung 9 (zu Maple) - Institut

Werbung
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
Herunterladen