Der Algorithmus
Folgendes ist zu bearbeiten:- Hier folgt Quelltext...
Die Implementierung
Hier folgt Quelltext. Eine sehr frühe Implementierung.import math def __faktorisieren(n): ''' Funktion, die eine Zahl n faktorisiert, sobald 2 ganzzahlige Faktoren gefunden wurden, dann Rueckgabe der beiden Werte. Es werden nicht alle Faktoren fuer die Zahl n gesucht! ''' n = int(n) zahl = math.sqrt(n) if int(zahl) == zahl: a = n // zahl b = zahl return a, b else: zahl = int(zahl) for i in range(zahl,n+1): if n / i == n // i: a = n // i b = i return a, b def primfaktoren_bestimmen(n): ''' Funktion, die fuer eine Zahl n die Primzahlenfaktorisierung erledigt ''' primzahlen = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] result = [] # Nimmt das Ergebnis auf queue = [] if n in primzahlen: return "Primzahl!" elif n == 1: print("Keine Faktorisierung möglich!") return n else: a, b = __faktorisieren(n) queue.append(a) queue.append(b) while True: x = queue.pop() if x in primzahlen: result.append(x) else: a, b = __faktorisieren(x) queue.append(a) queue.append(b) if len(queue) == 0: result.sort() result = [int(x) for x in result] return result for i in range(2,100): print(i, primfaktoren_bestimmen(i))Ich habe eine Primzahlliste für den Zahlenraum zwischen 1 und 100 beigegeben, um zu prüfen, ob die jeweilige Zahl noch einmal faktorisiert werden muss.
Eigentlich müsste das Skript aber auch selbst Primzahlen erkennen können: Eine Zahl n ist nämlich dann eine Primzahl, wenn als Faktoren die Zahlen 1 und n zurückkommen. Die Prüfung könnte auch dann an dieser Stelle enden und die Zahl n könnte der Ergebnisliste result beigegeben werden. Das ist (noch) nicht implementiert, wäre aber gerade für besonders große Zahlen interessant.
Zu diesem Eintrag gehört dieser Thread im Python-Forum.
Keine Kommentare:
Kommentar veröffentlichen