Berechnung von Primzahlzwillingen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Berechnung von Primzahlzwillingen

Beitragvon Cthulhu » Freitag 15. Dezember 2006, 16:16

Code: Alles auswählen

#Priemzahlzwillinge
print"Um alle Priemzahlzwillinge in einem bestimmten Bereich rauszufinden, bitte den Bereich Definieren:"
a=input("Von ")
b=input(" bis ")
for p in range(a,b):
    i=1
    j=1
    h=p/2
    while j!=0 and i<h:
        i=i+1
        j=p%i
    if j!=0 and p!=a:
        print p
        print"    "

    while j!=0 and i<h:
        i=i
        j=p%i
    if j!=0 and p!=b:
        print p


das ist mein code!
aber wnen ich jetzt 10 und 20 eingebe:

Um alle Priemzahlzwillinge in einem bestimmten Bereich rauszufinden, bitte den Bereich Definieren:
Von 10
bis 20
11

11
13

13
17

17
19

19


ich möchte aber dass es so ausgegeben wird:

Um alle Priemzahlzwillinge in einem bestimmten Bereich rauszufinden, bitte den Bereich Definieren:
Von 10
bis 20

11
13

13
17

17
19


also die erste und die letzte zahl sollen weg!
hofe auf hilfe
danke im vorraus


Edit (birkenfeld): Titel angepasst.
BlackJack

Beitragvon BlackJack » Freitag 15. Dezember 2006, 17:04

Dazu wirst Du den Algorithmus ändern müssen. Den ich nicht so wirklich verstehe und der auch keine Primzahlzwillinge berechnet. Ausser den Paaren 11, 13 und 17, 19 ist die Differenz grösser als 2.

Es ist vielleicht einfacher erst einmal alle Primzahlen im gewünschten Bereich zu berechnen und aus denen dann die Primzahlzwillinge herauszusuchen.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Freitag 15. Dezember 2006, 20:14

Der Threadtitel ist ja fantastisch! Nicht nur nichtssagend sondern auch irreführend; das wenige, was man da raus interpretieren kann, hat auch nichts mit dem Problem zu tun.

"Fehler bei Primzahlzwillingsberechnung" oder sowas wäre sehr viel besser; die Wahrscheinlichkeit, dass sich die richtigen Leute den Thread anschauen, auch höher.

Ansonsten schließe ich mich BlackJack an. Nicht jedesmal neu Primzahlen berechen, sondern nur einmal. Dann kannst du in der Liste einfach durchgehen und schauen, ob zwei benachbarte Einträge die Differenz 2 haben.
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Beitragvon Cthulhu » Dienstag 26. Dezember 2006, 12:13

Ich habe aber keine ahnung wie ich das machen soll!
ich weiß wie ich die priemzahlen in ineem bereich aurechnen kann! aber dann müsste ich diese ja irgendwie speichern dass sich das programm die primzahlen merkt!
und dann dort in dem gespeicherten nachschauen ob die differenz 2 ist falls ja gibt er dann die 2 zahlen raus!
ich habe aber ehrlichgesagt garkeine ahnung wie ich das schreiben soll!
Tipps wären nett!
BlackJack

Beitragvon BlackJack » Dienstag 26. Dezember 2006, 13:58

Wie berechnest Du denn die Primzahlen in einem Bereich? Die musst Du nur ein einer Liste speichern. Das verpackst Du am besten in einer Funktion, die den Bereich als Argument(e) bekommt und die Liste mit den Primzahlen zurück gibt.

Dann brauchst Du nur noch eine zweite Funktion, die die Primzahlzwillinge aussortiert und in eine neue Liste packt und schon kannst Du beide Funktionen kombinieren um das gewünschte Ergebnis zu erhalten.
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Beitragvon Cthulhu » Mittwoch 27. Dezember 2006, 15:35

und wie mache ich das?

davon hab ich noch nie was gehört!

könntest nicht irgendwie ein bespiel posten damit ich sehe wie ich es schreiben muss! weil entwerder hatten wir das in der schule noch nicht oder ich verstehe dich falsch und an nem beispiel kann man dass dann super überprüfen!

(ich verlange nicht das ganze programm)

Danke
Smokie_joe
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 22:20

Beitragvon Smokie_joe » Mittwoch 27. Dezember 2006, 16:02

Hi also um die Primzahlen Herauszufinden kannst du den Algorithmus:
"Sieb des Eratosthenses" verwenden.

http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes

Auf der Wikiseite ist rechts ein gif auf dem das Vorgehen animiert dargestellt wird.

Bei der Umsetzung des Algorithmus in Python gehst du ungefähr so vor:

Mache dir eine liste die die Zahlen: 0 - ("bis Eingabe") des Gewünschten Zahlenbereichs enthält.
Wende auf die liste den algorythmus an. Dann hast du nur noch die Primzahlen in der liste und anschließend kannst du wenn du nicht die Primzahlen von 0 aus willst diese noch löschen.(z.b. lösche alle Primzahlen die < ("von Eingabe").

mfg
Smokie
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Beitragvon Cthulhu » Freitag 29. Dezember 2006, 16:43

ja und wie erstelle ich eine liste in die der bereich reingeschrieben wird???
BlackJack

Beitragvon BlackJack » Freitag 29. Dezember 2006, 17:04

Mit `list()` oder `[]`. Arbeite doch wenigstens mal das Tutorial aus der Python-Doku durch.
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Beitragvon Cthulhu » Freitag 5. Januar 2007, 22:50

also ein kumpel von mir hatte mir jetzt dne tipp gegeben ich schau zuerst ob eine zahl eine primzahl ist dann schau ich ob die zahl + 2 eine priemzahl ist falls ja gib die beiden zahlen aus!
ich hab das versucht zu verwirklichen aber irgendwie hab ich einene fehler eingebaut und der will nicht gefunden werden!
hoffe ihr findet ihn!

Code: Alles auswählen

#Primzahlzwillinge
print"Um alle Primzahlzwillinge in einem bestimmten Bereich zu finden, bitte hier den Bereich definieren: "
a=input("Von: ")
b=input("bis: ")
for p in range (a,b):
    h=p/2
    i=1
    j=1
    t=1
    while j!=0 and i<=h:
        i=i+i
        j=p%i

    if j!=0 and p!=a:
        while t!=0 and i<=h:
            q=p+2
            t=q%i
        if t!=0 and p!=a:
            print" "
            print p
            print p+2


und wenn ihr mir gerade am helfen seid und ich den quellcode hier reingeschrieben habe könntet ihr mir vl auch noch sagen wie ich es hinkriege dass nache wenn ich das proggi laufne lasse das "von" und "bis" schön in einer reihe steht (macht neen schöneren eindruck!)

Danke im vorraus
BlackJack

Beitragvon BlackJack » Samstag 6. Januar 2007, 00:05

So unkommentiert ist der Quelltext schwer verständlich.

Schau Dir mal an was Du in den Schleifen als Abbruchbedingungen stehen hast und ob die alle erreicht werden können, oder ob da nicht eine dabei ist, die in einer Endlosschleife enden kann.

Dein Ansatz ist übrigens sehr ineffizient.
helmut
User
Beiträge: 57
Registriert: Mittwoch 2. November 2005, 07:45
Wohnort: Dormagen

Beitragvon helmut » Samstag 6. Januar 2007, 09:27

also ein kumpel von mir hatte mir jetzt dne tipp gegeben ich schau zuerst ob eine zahl eine primzahl ist
Dieses "Schauen" packst Du am besten in eine eigene Funktion. Bei der Programmierung dieser Funktion kannst Du bei Wikipedia mit den Suchwörtern Primzahl, Primfaktor, Faktorisierungsverfahren, ... Hilfe zur Erstellung eines effizienten Codes finden.
Gruss Helmut
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Beitragvon Luzandro » Samstag 6. Januar 2007, 10:36

Auch wenn du es mit vielen verschiedenen nichtssagenden Variablen verschleierst - das einzige was dein Code berechnet sind Paare von ungeraden Zahlen. Es wurde dir hier schon der Link zum Sieb des Erastosthenes gepostet und ich würde dir nochmals vorschlagen, dass du dir diesen durchlest und eine Funktion schreibst, die dir für einen gegebenen Bereich eine List der Primzahlen liefert.

Noch ein paar Kommentare zu deinem Code:

Code: Alles auswählen

...
    while j!=0 and i<=h:
        i=i+i
        j=p%i

    if j!=0 and p!=a:
...

Das einzige was du damit überprüfst (abgesehen vom p!=a, was eigentl. unnötig/falsch ist), ist ob p ungerade ist, denn i ist immer ein Vielfaches von 2 und j kann daher auch nur 0 sein, wenn p gerade ist

Code: Alles auswählen

        while t!=0 and i<=h:
            q=p+2
            t=q%i

i <= h ist schon die Abbruchbedingung der vorigen Schleife, d.h. der Teil hier wird nie ausgeführt

Code: Alles auswählen

        if t!=0 and p!=a:
            print" "
            print p
            print p+2

und damit ist dieses if auch immer wahr, denn das p hast du schon einmal abgefragt (warum auch immer) und das t ist immer 1
Cthulhu
User
Beiträge: 38
Registriert: Freitag 17. November 2006, 16:00

Beitragvon Cthulhu » Donnerstag 11. Januar 2007, 22:21

so ich hab jezttz folgendes programm gebaut:

Code: Alles auswählen

#Primzahlzwillinge
print"Um alle Priemzahlzwillinge in einem bestimmten Bereich rauszufinden, bitte den Bereich Definieren:"
a=input("Von ")
b=input(" bis ")
for p in range(a,b):
    i=1
    j=1
    h=p/2
    while j!=0 and i<h:
        i=i+1
        j=p%i
    if j!=0 and p!=a and p!=1:
        z=p
        t=1
        k=z+2
        while t!=0 and i!=h+2:
            i=i+1
            t=k%i
        if t>0 and k!=a and p!=1:
            print p
            print k
            print ""


aber es hat noch ine kleine makke!
es gibt immer die primzahl +2 noch raus aber meiner meinung nach hab ich das in dem code so geregelt dass er die beiden zahlen nur ausgibt wenn beide priemzahlen sind!?!?

ich möchte jetzt bitte hilfe zu meinem quelltext haben und nicht wieder auf das sieb des was weiß ich was abgelenkt werden!
es funktioniert so!
ich finde nur dne fehler nicht!

ich erläutere auch gerne den ablauf!
also zuerst definiert man einen bereich dann schaue ich ob der rest irgendwann 0 wird (w.h. die teilung würde aufgehen, w.h. es ist keine primzahl) wenn sie dnan bis zu einem gewissen punkt nicht aufgeht ist es eine primzahl!
(bis hierhun funktionniert das proggi auch!
aber jetzt soll er das ganz wieder machen nur mit der primzahl plus 2 abe rirgendwie druckt er die einfach aus ohne zu überprüfen obs ne primzahl is!

bitte um hilfe!

(bitte nichtwieder irgendwelche links! brauche direkt hilfe! danke)
BlackJack

Beitragvon BlackJack » Donnerstag 11. Januar 2007, 23:24

Nimm Dir einfach mal ein Blatt Papier und einen Bleistift und vollzieh das Programm Schritt für Schritt nach was passiert, wenn `p` eine Primzahl ist, die nicht zu einem Zwilling gehört.

Und versuch mal unnötige Namen und Tests zu entfernen. Wozu braucht man `z`?

Ob `p` (un)gleich 1 ist, kann man ganz am Anfang einmal sicherstellen, dann braucht man das nicht mehr testen. Und wann soll `k` jemals gleich `a` werden können wenn `p` das schon nicht sein kann? Warum darf `p` nicht gleich `a` sein?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder