Python :: Aufgabe #116 :: Lösung #3

9 Lösungen Lösungen öffentlich
#116

Bestimmung des kleinsten gemeinsamen Vielfachen (kgV)

Anfänger - Python von Nachbar - 09.07.2016 um 10:08 Uhr
Schreibe ein Programm zur Bestimmung des kgV zweier natürlicher Zahlen (siehe Beispiel zur kgV-Berechnung). Die Berechnung soll ohne Beteiligung des größten gemeinsamen Teilers erfolgen.

Beispielausgabe:
Zahl 1: 5
Zahl 2: 7

kgV: 35
#3
8 Kommentare
vote_ok
von Peter... (160 Punkte) - 13.08.2016 um 16:20 Uhr
der code ist im Anhang in Form einer .py Datei, da die Zeileneinschübe beim kopieren nicht übernommen wurden.
Verbesserungsvorschläge sind willkommen1

Kommentare:

Nachbar

Punkte: 2820

30 Aufgaben
67 Lösungen
44 Kommentare

#1
14.08.2016 um 21:14 Uhr
Hi,
du wirst schon an den anderen Lösungen erkennen, dass die Aufgabe schneller und einfacher zu lösen ist, als über die Primfaktorenzerlegung. Aber das übt ja auch alles :) Allerdings ist dein Programm nicht sehr performant.

Ich bin mir nicht sicher ob die Fehlermeldung die ich bekomme daher rührt, dass ich mit Python2 arbeite aber wenn ich z. B. als erste Zahl die '122' oder die '14' eingebe passiert Folgendes:

Fehlermeldung:

Traceback (most recent call last):
File "/test.py", line 43, in <module>
Second = Primfaktorzerlegung(int(input('Bitte die erste Zahl eingeben: ')))
File "/test.py", line 32, in Primfaktorzerlegung
while number % prime_fac == 0:
TypeError: unsupported operand type(s) for %: 'int' and 'NoneType'


Probiere das mal aus. Zuletzt: Wenn du deinen Code beim Einreichen in die entsprechenden Tags setzt, wird er korrekt eingerückt. So z. B.:

Zitat:

Quellcode ausblenden Python-Code
dein code 

.
Kannst ja mal versuchen den Fehler auszumerzen, falls es denn tatsächlich einer ist und den Code dann noch mal zu posten.

Grüße vom
Nachbar
post_arrow
350 0

Nachbar

Punkte: 2820

30 Aufgaben
67 Lösungen
44 Kommentare

#2
14.08.2016 um 21:16 Uhr
Hm das Zitat für die Code-Einrückung ist misslungen, wollte schreiben:

Quellcode ausblenden Python-Code
dein code
post_arrow
351 0

Nachbar

Punkte: 2820

30 Aufgaben
67 Lösungen
44 Kommentare

#3
14.08.2016 um 21:18 Uhr
Mist hat schon wieder nicht geklappt! Achte beim Einreichen halt auf die Code-Tags über dem Eingabefeld.
post_arrow
352 0

Peter...

Punkte: 160


4 Lösungen
4 Kommentare

#4
18.08.2016 um 19:37 Uhr

def is_prime(num):
if num == 2:
return True
i = 2
while i < num/2:
if num % i == 0:
return False
else:
i += 1
else: return True

def prime_in_numb(numb, j):

while j <= numb/2:
if is_prime(j)== True and numb % j == 0:
return j
j += 1



def Primfaktorzerlegung(frst_num):
if is_prime(frst_num) == True:
return {frst_num : 1}
number = frst_num
frst_fac = {}
prime_fac = 1
while number != 1:
expon = 0
prime_fac = prime_in_numb(frst_num, (prime_fac+1))
while number % prime_fac == 0:
expon += 1
number //= prime_fac

frst_fac[prime_fac] = expon
if expon == 0:
del frst_fac[prime_fac]
return frst_fac


First = Primfaktorzerlegung(int(input('Bitte die erste Zahl eingeben: ')))
Second = Primfaktorzerlegung(int(input('Bitte die zweite Zahl eingeben: ')))
kgV_prod = 1
kgV_set = (set(First)& set(Second)) | (set(First)^ set(Second))
for factor in kgV_set:
if factor not in Second:
kgV_prod *= factor**(First[factor])
elif factor not in First:
kgV_prod *= factor**(Second[factor])
elif First[factor] >= Second[factor]:
kgV_prod *= factor**(First[factor])
else:
kgV_prod *= factor**(Second[factor])



print('Das kleinste gemeinsame Vielfache ist',str(kgV_prod)+'.')




So jetzt müsste der Code funktionieren. Wie das so ist, hab ich nur ein '='-Zeichen bei einer if-Abfrage vergessen...
Weißt du, ob ich meine Lösung 'aktualisieren' und neu bewerten lassen kann? Ich war mir meines Fehlers bis zu deinem Kommentar nicht
bewusst...

LG Peter
post_arrow
357 0

Peter...

Punkte: 160


4 Lösungen
4 Kommentare

#5
18.08.2016 um 19:38 Uhr

def is_prime(num):
if num == 2:
return True
i = 2
while i < num/2:
if num % i == 0:
return False
else:
i += 1
else: return True

def prime_in_numb(numb, j):

while j <= numb/2:
if is_prime(j)== True and numb % j == 0:
return j
j += 1



def Primfaktorzerlegung(frst_num):
if is_prime(frst_num) == True:
return {frst_num : 1}
number = frst_num
frst_fac = {}
prime_fac = 1
while number != 1:
expon = 0
prime_fac = prime_in_numb(frst_num, (prime_fac+1))
while number % prime_fac == 0:
expon += 1
number //= prime_fac

frst_fac[prime_fac] = expon
if expon == 0:
del frst_fac[prime_fac]
return frst_fac


First = Primfaktorzerlegung(int(input('Bitte die erste Zahl eingeben: ')))
Second = Primfaktorzerlegung(int(input('Bitte die zweite Zahl eingeben: ')))
kgV_prod = 1
kgV_set = (set(First)& set(Second)) | (set(First)^ set(Second))
for factor in kgV_set:
if factor not in Second:
kgV_prod *= factor**(First[factor])
elif factor not in First:
kgV_prod *= factor**(Second[factor])
elif First[factor] >= Second[factor]:
kgV_prod *= factor**(First[factor])
else:
kgV_prod *= factor**(Second[factor])



print('Das kleinste gemeinsame Vielfache ist',str(kgV_prod)+'.')




So jetzt müsste der Code funktionieren. Wie das so ist, hab ich nur ein '='-Zeichen bei einer if-Abfrage vergessen...
Weißt du, ob ich meine Lösung 'aktualisieren' und neu bewerten lassen kann? Ich war mir meines Fehlers bis zu deinem Kommentar nicht
bewusst...

LG Peter
post_arrow
358 0
Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2095202

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.