Python :: Aufgabe #335
5 Lösungen

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ß
Lösungen:

def ausgabe(faktoren): n = faktoren.count(faktoren[0]) print('{}^{}'.format(faktoren[0], n), end='') for i in range(n): faktoren.pop(0) if len(faktoren) > 0: print(end=' * ') ausgabe(faktoren) def primfaktoren(zahl): i = 2 faktoren = [] while i <= zahl: if zahl % i == 0: faktoren.append(i) zahl = zahl / i else: i = i + 1 return ausgabe(faktoren) primfaktoren(24)

zahl = 27861786873687128719827 zahl_text = str(zahl) # primfaktorliste mit Duplikaten i = 2 liste = [] while i <= zahl: if zahl % i == 0: liste.append(i) zahl = int(zahl / i) i = 1 print(liste) i += 1 # Primfaktoren ohne Duplikate liste2 = list(set(liste)) liste2.sort() # Anzahl Primfaktoren anzahl = [] for element in liste2: i = 0 for e in liste: if element == e: i += 1 anzahl.append(i) # Ausgabe print(zahl_text, "=") for i in range(0, len(liste2) - 1): print(liste2[i], "^", anzahl[i], "* ", end="") print(liste2[len(liste2) - 1], "^", anzahl[len(liste2) - 1])

""" #335: Primfaktorzerlegung und Potenzschreibweise Schreibe eine Methode/Funktion, die jede Integer- Zahl in ihre Primfaktoren zerlegen kann und das Ergebnis als Array/Liste zurückgibt. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays in Potenzschreibweise überführt und auf dem Bildschirm ausgibt. """ import collections def prf_prim(ein): print("Ergebnis für die Zahl", ein) prim_arr = [] di = 2 while di ** 2 <= ein: while (ein % di) == 0: prim_arr.append(di) ein //= di di += 1 if ein > 1: prim_arr.append(ein) print(prim_arr) for (basis, hochz) in collections.Counter(prim_arr).items(): print(basis, "**", hochz) def main(): prf_prim(24) prf_prim(0) prf_prim(105) if __name__ == '__main__': main()

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))}")

prim = [2] ar = [] def primCalculation(end): for i in range(3, end): a = 2 isPrimCount = 0 noPrimCount = 0 while a < i: rest = i % a if rest != 0: a = a + 1 isPrimCount = isPrimCount + 1 else: noPrimCount = noPrimCount + 1 a = a + 1 if noPrimCount == 0 and isPrimCount > 0: prim.append(i) def divide(number): primCalculation(number) y = 0 for i in prim: next = False stop = False while type(y) == int and next is False and stop is False: y = number / i if str(y).endswith('.0') and stop is False: ar.append(i) y = int(y) number = y next = False if i > y: stop = True else: y = y * i y = int(y) next = True print(ar) # 1. Ausgabe potenz() # 2. Ausgabe def potenz(): inhalt = [] finalString = '' for i in ar: if i not in inhalt: inhalt.append(i) for i in inhalt: if ar.count(i) > 1: if finalString == '': finalString += str(i) + ' ^ ' + str(ar.count(i)) else: finalString += ' + ' + str(i) + ' ^ ' + str(ar.count(i)) else: if finalString == '': finalString += str(i) + ' ^ 1' else: finalString += ' + ' + str(i) + ' ^ 1' print(finalString) divide(50)