Seite 1 von 1

Primzahlzerlegung

Verfasst: Sonntag 6. Mai 2018, 15:32
von StareDog
Hallo!

Hab schon wieder eine neue Aufgabe.

Und zwar soll ich ein Programm schreiben, das die Primzahlzerlegung für eine Zahl n ausgibt, ausgehend von der niedrigsten Primzahl

Code: Alles auswählen

n= int(input("n = "))
p = 2
while n != p:
    if n%p == 0:
        print(p)
        n = n//p
    else:
        p+=1
else:
    print(n,p)
Das Programm funktioniert. Allerdings soll ich die Lösung in der Form n = 1 * a * b * c*d ... *z ausgeben. WIe geht das? Entweder ich mache darunter eine Formel die jeweils um den nächsten Faktor erweitert wird. Oder das Programm liest die Ergebnisse aus und bringt sie in die obige Form.

Ansonsten:

habt ihr noch irgendwelche vorschläge wie ich das Programm besser schreiben könnte oder seid ihr soweit einverstanden? Hab hier ja schon was reingestellt in das forum und der while-else-lösungsweg wurde mir gesagt, sei nicht so elegant/effizient oder wie auch immer :)

alternativ ginge es sicher auch mit

while True
n = int (input("n =))
if p == n:
break
elif:
n%p ==0
n = n//p
else: p+=1

print (Primzahlzerlegung ist n = 1*a*b*b*c*...z)

Hab die untere Schreibweise nur kurz aus zeitgründen so hingeschrieben, aber so ähnlich müsste die doch gehen.

Schönen Nachmittag noch!

Re: Primzahlzerlegung

Verfasst: Sonntag 6. Mai 2018, 18:16
von nezzcarth
Ich würde von einem Programm zur Primfaktorzerlegung erwarten, dass es eine Funktion enthält, die die eigentliche Zerlegung durchführt und die Faktoren als Liste/Tupel zurück gibt (oder einen Iterator, der die Faktoren nach einander ausgibt). Das hat auch den Vorteil, dass du die Ausgabe beliebig gestalten kannst. Das, was du schon hast, kann man dahingehend ausbauen.

Re: Primzahlzerlegung

Verfasst: Sonntag 6. Mai 2018, 18:33
von Sirius3
Eine while-Schleife mit else-Block ist nur sinnvoll, wenn es auch ein break gibt. Die Ausgabe kann man am einfachsten anpassen, wenn man eine Funktion hat, die alle Primfaktoren als Liste zurückgibt.