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
