Programmieren Sieb Eratosthenes Primzahlen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
S3leyman
User
Beiträge: 4
Registriert: Samstag 13. Januar 2018, 13:27

Samstag 13. Januar 2018, 13:43

:( Guten Tag ,
dies ist mein erster Beitrag hier. Ich studiere Physik im ersten Semester und komme mit dieser Aufgabe nicht klar. Könnt ihr mir bitte helfen.
Das ist der Ansatz mit dem wir arbeiten sollen bzw. das Sieb des Eratosthenes:

1 import sys
2 print ("Primzahlen bis n_max=",file=sys.stderr,end=")
3nmax=int(input())
6 n=0
7 for s in range (2,nmax+1):
8 -----if p [s] :
9 ---------n+= 1
10 --------print (s,n)
11---------for m in range (2*s,nmax+1,s):
12-------------p [m] = False

Aufgabe :
Implementieren Sie das Sieb des Eratosthenes in einem Skript
sieb.py, indem Sie die Liste über ein Feld p[] mit n_max+1
booleschen Elementen realisieren…
. Alle Werte sind zunächst True,
d.h. p[k] = True bedeutet, dass sich k noch in der Liste bendet.
Dementsprechend erfolgt das Streichen von k aus der Liste durch
das Setzen von p[k] auf False.
Die Obergrenze nmax soll beim Programmstart eingegeben werden
können. Ausgegeben werden soll jede gefundene Primzahl.
Tipp: Nutzen Sie für das Streichen der Vielfachen von n die
angebbare Schrittweite bei range()
Erweiterung: Zählen Sie die gefundenen Primzahlen und geben
jeweils die Primzahl sowie ihre Nummer aus (⇒ 2-spaltige Tabelle),
sodass sie das Ergebnis plotten können



Danke im Vorraus :)
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 13. Januar 2018, 13:49

Bitte die Code Tags für Code benutzen, dann ist der gut zu lesen & du musst auch nicht wie ein Wahnsinniger Bindestriche einführen.

Und den Thread über Studenten und Hausaufgaben mal anschauen. Wir liefern hier keine Hausaufgaben frei Haus. Sondern helfen bei konkreten Problemen. Was dein Problem ist, hast du nicht formuliert.
Benutzeravatar
pixewakb
User
Beiträge: 1085
Registriert: Sonntag 24. April 2011, 19:43

Samstag 13. Januar 2018, 14:22

Such mal im Forum nach dem Thema und dem Autor BlackJack, der hat zu deinem Problem eine m. E. sehr überzeugende, sehr performante Realisierung geboten.
Benutzeravatar
noisefloor
User
Beiträge: 2474
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Samstag 13. Januar 2018, 16:51

Hallo,

@S3leyman:
* welche Sinn siehst du in dem `file=...` in der print-Funktion?
* in Zeilen 8 wird dein Programm mit einem Fehler ausstiegen

Gruß, noisefloor
Sirius3
User
Beiträge: 8411
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 13. Januar 2018, 16:51

@S3leyman: wer ist auf die Idee gekommen, einen normalen Text auf stderr auszugeben? Der Prompt wird als Argument von »input« übergeben.
Gewöhn Dir gleich an, aussagekräftige Namen zu verwenden, also statt »p«, »prime_sieve«. Deine Leerzeichensetzung ist seltsam. Zwischen Variable und öffnende Klammer ( und [ kommt kein Leerzeichen. Nach , und vor und nach + * - = etc kommen Leerzeichen.

So kommen wir auf das hier:

Code: Alles auswählen

n_max = int(input("Primzahlen bis n_max="))
prime_count = 0
for number in range(2, n_max+1):
    if prime_sieve[number]:
        prime_count += 1
        print(number, prime_count)
        for m in range(number ** 2, n_max+1, s):
            prime_sieve[m] = False
So ist das Programm schon fast als normales Englisch zu lesen.

Was ist nun Deine Frage?
S3leyman
User
Beiträge: 4
Registriert: Samstag 13. Januar 2018, 13:27

Sonntag 14. Januar 2018, 21:46

Sirius3 hat geschrieben:@S3leyman: wer ist auf die Idee gekommen, einen normalen Text auf stderr auszugeben? Der Prompt wird als Argument von »input« übergeben.
Gewöhn Dir gleich an, aussagekräftige Namen zu verwenden, also statt »p«, »prime_sieve«. Deine Leerzeichensetzung ist seltsam. Zwischen Variable und öffnende Klammer ( und [ kommt kein Leerzeichen. Nach , und vor und nach + * - = etc kommen Leerzeichen.

So kommen wir auf das hier:

Code: Alles auswählen

n_max = int(input("Primzahlen bis n_max="))
prime_count = 0
for number in range(2, n_max+1):
    if prime_sieve[number]:
        prime_count += 1
        print(number, prime_count)
        for m in range(number ** 2, n_max+1, s):
            prime_sieve[m] = False
So ist das Programm schon fast als normales Englisch zu lesen.

Was ist nun Deine Frage?
Guten Abend und vielen Dank für deine Antwort, ich Danke auch vielmals den anderen Usern.
@sirius Unser Dozent hat es uns so vorgegeben.. Wie schon erwähnt studiere ich Physik, Programmierung ist nur sowas wie ein Zusatzkurs, welches wir im ersten Semester jedoch belegen müssen.. im Moment komme ich mit dem Stoff nicht gut zurecht, finde die Folien bzw das Skript auch nicht sehr verständlich. Du @Sirius3 scheinst dich sehr gut auszukennen mit Python. Kannst du mir Tipps geben für das erlernen dieser Sprache, evtl. eine Fachliteratur. Die Aufgabe scheinst du gelöst zu haben , sehe ich das richtig ?:)
Benutzeravatar
noisefloor
User
Beiträge: 2474
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Sonntag 14. Januar 2018, 21:47

Hallo,

empfehlenswert ist immer das offiziellen Python-Tutorial: https://docs.python.org/3.5/tutorial/

Wenn du das durcharbeitest, dann solltest du die Grundlagen drauf haben.

Gruß, noisefloor
S3leyman
User
Beiträge: 4
Registriert: Samstag 13. Januar 2018, 13:27

Sonntag 14. Januar 2018, 21:57

pixewakb hat geschrieben:Such mal im Forum nach dem Thema und dem Autor BlackJack, der hat zu deinem Problem eine m. E. sehr überzeugende, sehr performante Realisierung geboten.
Finde es leider nicht..
S3leyman
User
Beiträge: 4
Registriert: Samstag 13. Januar 2018, 13:27

Sonntag 14. Januar 2018, 21:59

noisefloor hat geschrieben:Hallo,

empfehlenswert ist immer das offiziellen Python-Tutorial: https://docs.python.org/3.5/tutorial/

Wenn du das durcharbeitest, dann solltest du die Grundlagen drauf haben.

Gruß, noisefloor
Vielen Dank :) ich schaue es mir an:) Ich nehme an , dass was Sirius ordentlich aufgeschrieben hat, ist nicht die Lösung sondern dass was ich so unschön dahingeklatscht habe..
Sirius3
User
Beiträge: 8411
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 14. Januar 2018, 22:44

@S3leyman: auch wenn Dir das nur als Pflicht vorkommt und Du neben der Vorlesung noch viel Zeit investieren mußt, kenn ich kaum einen Physiker, der nicht programmieren würde. Hausaufgaben löse ich hier nicht. Mit einem allgemeinen ›ich versteh nichts‹ kommst Du hier auch nicht weiter. Was ist Deine konkrete Frage?
Antworten