36 lines
No EOL
1.9 KiB
Text
36 lines
No EOL
1.9 KiB
Text
Das Sieb von Eratosthenes ist ein effizienter Algorithmus zur Bestimmung aller Primzahlen bis zu einer bestimmten Grenze. Der Algorithmus funktioniert, indem er iterativ die Vielfachen jeder Primzahl ab dem Quadrat der Primzahl als nicht prim markiert. Die Schritte des Algorithmus sind wie folgt:
|
|
|
|
1. Erstelle eine Liste von booleschen Werten, die alle auf 'wahr' gesetzt sind. Die Indizes dieser Liste repräsentieren die Zahlen von 2 bis zu einer oberen Grenze n.
|
|
2. Setze den Wert der Indizes 0 und 1 auf 'falsch', da 0 und 1 keine Primzahlen sind.
|
|
3. Beginne mit der ersten Primzahl p (p = 2).
|
|
4. Markiere alle Vielfachen von p (beginnend mit p^2) als 'falsch'.
|
|
5. Finde die nächste Zahl in der Liste, die noch 'wahr' ist. Dies ist die nächste Primzahl.
|
|
6. Wiederhole die Schritte 4 und 5, bis p^2 größer als n ist.
|
|
7. Die verbleibenden 'wahren' Werte in der Liste repräsentieren Primzahlen.
|
|
|
|
Hier ist eine Beispielimplementierung in Python, die die ersten 1000 Primzahlen berechnet:
|
|
|
|
python
|
|
import itertools
|
|
|
|
def sieve_of_eratosthenes(limit):
|
|
sieve = [True] * (limit + 1)
|
|
sieve[0] = sieve[1] = False
|
|
for start in range(2, int(limit**0.5) + 1):
|
|
if sieve[start]:
|
|
for multiple in range(start*start, limit + 1, start):
|
|
sieve[multiple] = False
|
|
return [num for num, is_prime in enumerate(sieve) if is_prime]
|
|
|
|
# Da wir die ersten 1000 Primzahlen benötigen, müssen wir eine obere Grenze schätzen.
|
|
# Eine grobe Schätzung für die n-te Primzahl ist n * log(n * log(n)).
|
|
# Für die ersten 1000 Primzahlen ist eine Grenze von etwa 8000 ausreichend.
|
|
|
|
limit = 8000
|
|
primes = sieve_of_eratosthenes(limit)
|
|
first_1000_primes = primes[:1000]
|
|
|
|
print(first_1000_primes)
|
|
|
|
|
|
Diese Implementierung verwendet das Sieb von Eratosthenes, um Primzahlen bis zu einem bestimmten Limit zu finden. Die Schätzung der oberen Grenze stellt sicher, dass wir mindestens die ersten 1000 Primzahlen erhalten. |