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

5 Lösungen Lösungen öffentlich
#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ß
#4
vote_ok
von nitnat (670 Punkte) - 09.04.2021 um 18:55 Uhr
Quellcode ausblenden Python-Code
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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2118786

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.