K
So, habe fertig!
Ich habe eine angenehm übersichtliche Variante gefunden. Ich arbeite mit int-Arrays (2x2-dimensional, 2x1-dimensional). String-Arrays waren für Zahlenreihen-Vergleiche zu unhandlich.
Das Ganze dient übrigens der Berechnung des größten gemeinsamen Teiler (ggT) zweier Zahlen zwischen 1 und 60. Dazu werden durch Primfaktorzerlegung 2 Zahlenreihen gebildet, aus denen dann gleiche Sequenzen gefunden werden müssen.
Durch das Verfahren zur Ermittlung des ggT kommt erschwerend zu meinem Eingangspost hinzu, dass gleiche Sequenzen auch aus Teilsequenzen der Zahlenreihen bestehen können. Erleichternd wirkt jedoch, dass die Zahlenreihen hier nur aus den 10 ersten Primzahlen bestehen können und maximal 5 Elemente besitzen:
Beispiel:
Zahl 1: 10
Zahl 2: 30
Zahlenreihe 1: 2, 5
Zahlenreihe 2: 2, 3, 5
gleiche Sequenz: 2, 5
Nun gehe ich wie folgt vor:
1 Anlegen eines const int Array PrimZ[10] mit den Primzahlen
2 Ermittlung der Zahlenreihen durch Primfaktorzerlegung und Speichern der Werte in int Array PriFakt[2][5]
3 Vergleichen der einzelnen Elemente von PriFakt[0][] und PriFakt[1][] mit jedem Element von PrimZ[10] und Speichern der Häufigkeit von Übereinstimmungen in FaktCount[2][10]
4 Vergleichen der Häufigkeiten in FaktCount[0][i] und FaktCount[1][i] (wenn beide nicht 0) und kleineres FaktCount[][i] * PrimZ[i] zum Ergebniswert multiplizieren
Beispiel:
// Zahlen werden an Funktion ggT übergeben:
int ZahlA= 10, ZahlB= 30;
// Deklarationen und Initialisierungen:
int ggT=1;
int FaktCount[2][10]= {{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}};
int PriFakt[2][5]= {{0,0,0,0,0},{0,0,0,0,0}};
// Schritt 1:
const int PrimZ[10]= {2,3,5,7,11,13,17,19,23,29};
// Schritt 2 - Ergebnis:
PriFakt[2][5]= {{2,5,0,0,0},{2,3,5,0,0}}
// Schritt 3 - Ergebnis:
FaktCount[2][10]= {{1,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,0,0,0,0}}
// Schritt 4 - Ergebnis:
ggT= 1*((1*2)*(1*5))= 10;
Ich bin stolz auf mich (uhh was stinkt hier so nach Eigenlob?)
Falls sich jemand für den Code oder die Problematik interessiert, stehe ich zur Verfügung.