0 Daumen
1,3k Aufrufe

Ich habe auf der Mathelounge eine Frage gesehen, in der es darum ging, ob Zahlen des Typs x! * (x+1)! -1 prim sein können (https://www.mathelounge.de/527308/konnen-zahlen-dieses-typs-prim-sein-x-x-1-1?show=527361#a527361). Wie kann man das mit einem Programm herausfinden?

Avatar von

1 Antwort

+2 Daumen

Zunächst benötigst Du eine Funktion, die Fakultäten berechnen kann:

 static int faculty(int n) {
    return n == 1 || n == 0 ? 1 : n * faculty(n - 1);
}

Ferner musst Du eine Funktion bereitstellen, die prüfen kann, ob eine Zahl \(p\) prim ist.

 public static boolean is_prime(final int to_check) {
    final String regex = "(..+?)\\1+|.?";
    return !new String(new char[to_check]).matches(regex);
}

In einer While-Schleife testest Du nun, ob für einen gegebenen Wert \(x\) (repräsentiert durch die Variable int counter) die Formel \(x! \cdot(x+1)! -1\) eine Primzahl liefert. Falls ja, gibst Du sie aus.

public class Main {

static int faculty(int n) {
    return n == 1 || n == 0 ? 1 : n * faculty(n - 1);
}

public static boolean is_prime(final int to_check) {
    final String regex = "(..+?)\\1+|.?";
    return !new String(new char[to_check]).matches(regex);
}

public static void main(final String... args) {
    int counter = 0;
    int to_check = 0;
      while (true) {
        to_check = faculty(counter) * faculty(counter + 1) - 1;
        if (is_prime(to_check)) {
        System.out.printf("n=%d, value=%d\n",counter,to_check);
      }
      counter++;
    }
  }
}

Avatar von

Und bei welchem n steigt das Programm mit welcher Fehlermeldung aus?

Und bei welchem n steigt das Programm mit welcher Fehlermeldung aus? 

Teste dazu einfach das obige Programm mit einem weiteren Output.

Made by a lovely Community