Primzahlzerlegung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Sonntag 6. Mai 2018, 15:32

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!
nezzcarth
User
Beiträge: 540
Registriert: Samstag 16. April 2011, 12:47

Sonntag 6. Mai 2018, 18:16

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.
Sirius3
User
Beiträge: 8277
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 6. Mai 2018, 18:33

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.
Antworten