Hallo habt ihr eine idee wie man den größten Primfaktor mit hilfe einer Rekursion herausfindet? Bei mir ist es irgendwie ne endlosschleife, weil ich nicht weiß wie ich einen wert abspeicher, wenn der divider eine Primzahl ist und der andere nicht( wieder in die Rekursion) . Also falls ihr Tipps habt gerne stellen. Ps code kann unübersichtlich wirken:
Java:
package ProjectEuler3;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < findPrimeNumbers().size(); i++) {
System.out.println(findPrimeNumbers().get(i));
}
}
public static List<Integer> getPrimeFactor(int num) {
List<Integer> list = new ArrayList<>();
for (Integer n : findPrimeNumbers()) {
if (num == n) {
list.add(num);
break;
}
}
for (int i = 2; num % i != 0; i++) {
if (num % i == 0) {
for (Integer n : findPrimeNumbers()) {
if (num / i == n) {
if (i == n) {
list.add(i, num / i);
}
}
if (num / i == n && i != n) {
for (int p : getPrimeFactoR(i)) {
list.add(p);
}
} else if (num / i != n && i == n) {
for (int l : getPrimeFactoR(num / i)) {
list.add(l);
}
}
}
}
}
return list;
}
public static int[] getPrimeFactoR(int num) {
int[] arr = new int[num];
for (Integer n : findPrimeNumbers()) {
if (num == n) {
return new int[]{num};
}
}
for (int i = 2; num % i != 0; i++) {
if (num % i == 0) {
for (Integer n : findPrimeNumbers()) {
if (num / i == n) {
if (i == n) {
int[] temp = new int[]{num / i, i};
arr = temp;
}
}
if (num / i == n && i != n) {
int[] temp = new int[]{num / i};
arr = temp;
getPrimeFactoR(i);
} else if (num / i != n && i == n) {
int[] temp = new int[]{i};
arr = temp;
getPrimeFactoR(num / i);
}
}
}
}
return arr;
}
public static List<Integer> findPrimeNumbers() {
List<Integer> list = new ArrayList<>();
int counter = 0;
int zaehler = 0;
for (int i = 2; i < 20000; i++) {
for (Integer n : list) {
if (isTrue(i, n)) {
counter++;
}
}
if (counter == 0) {
list.add(i);
zaehler++;
} else counter = 0;
}
return list;
}
Java:
public static boolean isTrue(int n, int m) {
return n % m == 0;
}
}
Zuletzt bearbeitet von einem Moderator: