For the first time I don't know a solution. Who knows more? - Thank you very much.
package de.codegym.task.task14.task1420;
/*
GGT
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
public static void main(String[] args) throws Exception {
// eine neue ArrayList namens 'primfaktorenZahlX' anlegen
ArrayList<Integer> primfaktoren1 = new ArrayList<Integer>();
ArrayList<Integer> primfaktoren2 = new ArrayList<Integer>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int zahl1 = 0;
int zahl2 = 0;
try {
System.out.print("Geben Sie eine Ganzzahl ein: ");
zahl1 = Integer.parseInt(reader.readLine());
// zweite Zahl einlesen
System.out.print("Geben Sie noch eine Ganzzahl ein: ");
zahl2 = Integer.parseInt(reader.readLine());
} catch (NumberFormatException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
if (zahl1 <= 0 || zahl2 <= 0) {
throw new IllegalArgumentException();
}
primfaktorenzerlegung(zahl1, primfaktoren1);
primfaktorenzerlegung(zahl2, primfaktoren2);
int ggt = ggtBerechnen(primfaktoren1, primfaktoren2);
// System.out.println("Der GGT aus den Primfaktoren von " + zahl1 + " und " + zahl2 + " ist: " + ggt);
System.out.println(ggt);
// System.exit(0);
}
public static void primfaktorenzerlegung(int zahl, ArrayList<Integer > primfaktoren) {
for (int i = 2; i <= zahl; i++) { // den Rest der Zahl durch alle Zahlen von 2 bis zur Zahl selbst teilen
while (zahl % i == 0) {
primfaktoren.add(i); // wenn i ein Faktor von zahl ist, fügen ihn der ArrayList 'primfaktoren' hinzu
zahl /= i;
}
}
}
public static int ggtBerechnen(ArrayList<Integer> primfaktoren1, ArrayList<Integer> primfaktoren2) {
//HashMaps erstellen, um Primfaktoren und ihre Häufigkeiten zu speichern
HashMap<Integer, Integer> map1 = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> map2 = new HashMap<Integer, Integer>();
// Primfaktoren und ihre Häufigkeiten in 'primfaktoren1' zählen
for (int i : primfaktoren1) {
if (map1.containsKey(i)) {
map1.put(i, map1.get(i) + 1);
} else {
map1.put(i, 1);
}
}
// Primfaktoren und ihre Häufigkeiten in 'primfaktoren2' zählen
for (int i : primfaktoren2) {
if (map2.containsKey(i)) {
map2.put(i, map2.get(i) + 1);
} else {
map2.put(i, 1);
}
}
// gemeinsame Primfaktoren finden und ihre Produkte berechnen
int ggt = 1;
for (int i : map1.keySet()) {
if (map2.containsKey(i)) {
int min = Math.min(map1.get(i), map2.get(i));
for (int j = 0; j < min; j++) {
ggt *= i;
}
}
}
return ggt;
}
}