0 Daumen
567 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
 
Beste Antwort

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.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community