PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Übung: Primzahlen ausgeben funktioniert nicht



nidhoegg
29-05-2004, 17:08
Hallo!
Ich gehe gerade ein Python-tutorial durch und versuche mit mit ein paar kleinen Übungen.
Leider hab ich für folgenden Quelltext eine Augabe, die ich nicht verstehe:



>>> for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, 'equals', x, '*', n/x
break
else:
print n, 'is a prime number'


3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals 2 * 4
9 is a prime number
9 equals 3 * 3


Eigentlich soll die Schleife nach Primzahlen suchen und eine Ausgabe wie folgt haben:



2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3


Aber es wird ja seltsamerweise noch nicht mal bei 2 begonnen.
Wäre schön, wenn mir jemand auf die Sprünge helfen könnte. :)

Grüße
nidhoegg

peschmae
29-05-2004, 17:44
>>> for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, 'equals', x, '*', n/x
break
else:
print n, 'is a prime number'


Problem: das else wird bei jedem Durchlauf der inneren Schleife aufgerufen, bei dem nicht rauskommt, dass es _keine_ Primzahl ist.

Ich kann leider kein Python

Axo, die Einrückung, dann gehts:


for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, 'equals', x, '*', n/x
break
else:
print n, 'is a prime number'


Python kennt ein else bei For-Loops :eek: - das wird aufgerufen wenn die for-Schleife _nicht_ mit break verlassen wurde.


MfG Peschmä

nidhoegg
29-05-2004, 18:31
So einfach ists manchmal ... :rolleyes:
Danke peschmae, für die schnelle Antwort! :)

Gruß

nidhoegg

jahlives
24-12-2004, 21:07
Salut zusammen

also ich habe mir auch ein PrimScript geschrieben und hatte das gleiche Problem:

if n % x == 0:
Bei der Zahl zwei gibt der Modulo mit 2 natürlich 0 obwohl 2 eine Primzahl ist.


if(n%x == 0 and n != 2):
sollte den Sonderfall 2 abfangen (ist natürlich Python Code ;)

Gruss

tobi

Joghurt
24-12-2004, 23:33
Es reicht übrigens, alle Zahlen von 2 bis Sqrt(N) zu testen.

Sei nämlich p der kleinste Primfaktor, dann teilt N/p ebenfalls N.
Ist p>sqrt(N), gilt nämlich
N/p <= N/sqrt(N) = sqrt(N)

Hoffe, das war verständlich...