Ruby, Primfaktoren zu gegebener Zahl errechnen?

2 Antworten

Ich kann zwar kein Ruby kann dir aber den Algorithmus etwas erklären, die Implementierung in der Sprache musst du dann übernehmen.

Wenn man eine Liste von allen Primzahlen kennt welche kleiner als die Eingabe sind dann kann man so vorgehen, beginnend mit dem kleinsten Primfaktor 2.

  1. Teile die Zahl solange durch den Primfaktor bis die Division einen Rest liefert (Modulo Primfaktor == 0, wenn ja dann ist es teilbar, else Punkt2)
  2. Gehe zur nächsten Primzahl in der Liste
  3. Wenn die nächste Primzahl höher ist als die Eingabe hast du alle Primfaktoren gefunden

Der Algorithmus basiert auf der annahme, dass man die Primzahlen kennt, wenn das nicht der Fall ist muss man diese Berechnen.

Jetzt kann man vorher mit einem Algorithmus die primzahlen von 2 bis zur Eingegebene Zahl durchlaufen und sich so die Liste on the fly bilden, oder man strukturiert etwas um.

In dem oberen Algorithmus kann man auch fragen ist die Zahl durch 2 3 oder ungerade Zahlen teilbar, was in diesem Fall auf das selbe Ergebnis kommt.

Also kann man eine Schleife machen und zunächst Prüfen wie oft ist die Zahl ganz durch zwei Teilbar. (Dann hast du die Menge der 2er bei der Primfaktorzerlegung)

Wie oft ist die Zahl welche nicht mehr durch 2 Teilbar ist durch 3 Teilbar (Menge der 3er in der Zerlegung)

Wie oft ist die Zahl welche jetzt nicht mehr durch 2 und 3 teilbar ist durch 3+n*2 teilbar n ist dabei eine Zahl von 1 bis unendlich.

Wenn 3+n*2 größer der eingebenen Zahl ist bist du fertig.

das ist doch das Sieb des Eratosthenes... oda?

sei die gegebene Zahl X.
dann testet man sie auf Teilbarkeit (ohne Rest) durch 2, 3, 5, 7, ..., P (also alle Primzahlen, die kleiner als Wurzel(X) sind)...
wenn man einen Teiler T findet, hat man auch gleichzeitig einen zweiten Teiler gefunden (nämlich X/T)...
dann macht man also weiter bis P, um alle Primfaktoren zu finden...

20202020202020 
Fragesteller
 20.11.2017, 23:55

Danke für die Hilfe, ich schaffe es aber trotzdem nicht, ich kriege nicht einmal einen Anfang hin...

0
RIDDICC  21.11.2017, 06:58
@20202020202020

ach je... :)

man bräuchte ne Funktion, die den kleinsten Primfaktor einer übergebenen Zahl A findet (wenn man bis Wurzel(A) nix findet, dann ist es automatisch ne Primzahl und man kann A zurückgeben)...
dazu sollte die eine Liste von Primzahlen erzeugen, damit die Funktion nicht Schnecken-langsam ist...
oder man gibt diese Liste fest vor...
oder man testet erst 2 (die kleinste Primzahl) und dann 2·n+1 für n=1,2,3,... (wenn man sich an die Reihenfolge für die Werte von n hält, dann müsste man automatisch auf ein n stoßen, dass eine Primzahl ist...)...

0