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