Python :: Aufgabe #335 :: Lösung #4
5 Lösungen

#335
Primfaktorzerlegung und Potenzschreibweise
Fortgeschrittener - Python
von JKooP
- 03.04.2021 um 09:53 Uhr
1. Schreibe eine Methode/Funktion, die jede Integer- Zahl in ihre Primfaktoren zerlegen kann
und das Ergebnis als Array/Liste zurückgibt.
Beispiel:
24 = 2*2*2*3
Lösung:
a = { 2, 2, 2, 3 }
2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).
Lösung:
2*2*2 = 2^3
3 = 3^1
Ausgabe:
2^3 * 3^1
Viel Spaß
und das Ergebnis als Array/Liste zurückgibt.
Beispiel:
24 = 2*2*2*3
Lösung:
a = { 2, 2, 2, 3 }
2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).
Lösung:
2*2*2 = 2^3
3 = 3^1
Ausgabe:
2^3 * 3^1
Viel Spaß
#4

von nitnat (670 Punkte)
- 09.04.2021 um 18:55 Uhr

from sympy import isprime from functools import lru_cache def primeFact(n): # Rekursive Berechnung der Primfaktoren # Deklarator @lru_cache wird verwendet, um bereits # berechnete Werte zu cachen und Funktionsaufrufe zu sparen @lru_cache(maxsize=None) def recFact(n): if isprime(n): return [n] else: a = 2 while n % a != 0: a += 1 b = n // a return [recFact(a), recFact(b)] # x-dimensionale Liste in 1-dimensionale Liste umwandeln fact_list = [] def flatten(input_list): for element in input_list: if type(element) == list: flatten(element) else: fact_list.append(element) flatten(recFact(n)) return fact_list def createOutput(fact_list): fact_list.sort() fact_dict = {} output_str = "" superscript = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹") for i in fact_list: fact_dict[i] = str(fact_list.count(i)).translate(superscript) for i in fact_dict: output_str += f"{i}{fact_dict[i]} * " return output_str[:-3] # Test n = 987 print(f"Die kanonische Primfaktorzerlegung von {n} lautet:") print(f"{n} = {createOutput(primeFact(n))}")
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1