In den vorherigen Schritten haben wir die Fibonacci-Folge iterativ generiert und geprüft, ob eine Zahl in der Folge existiert, indem wir sie mit jedem Glied verglichen haben. Bei sehr großen Zahlen kann die Generierung der gesamten Folge ineffizient sein. In diesem Schritt werden wir eine mathematische Eigenschaft der Fibonacci-Zahlen untersuchen, die es uns ermöglicht, zu prüfen, ob eine Zahl eine Fibonacci-Zahl ist, ohne die Folge zu generieren.
Eine positive Ganzzahl x
ist genau dann eine Fibonacci-Zahl, wenn entweder 5*x^2 + 4
oder 5*x^2 - 4
eine perfekte Quadratzahl ist. Eine perfekte Quadratzahl ist eine Ganzzahl, die das Quadrat einer anderen Ganzzahl ist (z.B. ist 4 eine perfekte Quadratzahl, weil es 2*2 ist).
Wir werden ein neues Java-Programm erstellen, das diese Formel verwendet, um zu prüfen, ob eine Zahl eine Fibonacci-Zahl ist.
-
Erstellen Sie eine neue Datei namens CheckFibonacci.java
im Verzeichnis ~/project
.
-
Öffnen Sie CheckFibonacci.java
und kopieren und fügen Sie den folgenden Java-Code ein:
import java.util.Scanner;
public class CheckFibonacci {
// Function to check if a number is a perfect square
public static boolean isPerfectSquare(int n) {
if (n < 0) {
return false;
}
int sqrt = (int) Math.sqrt(n);
return (sqrt * sqrt == n);
}
// Function to check if a number is a Fibonacci number
public static boolean isFibonacci(int n) {
// n is Fibonacci if 5*n^2 + 4 or 5*n^2 - 4 is a perfect square
return isPerfectSquare(5 * n * n + 4) ||
isPerfectSquare(5 * n * n - 4);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a number to check if it is a Fibonacci number: ");
int num = scanner.nextInt();
if (isFibonacci(num)) {
System.out.println(num + " is a Fibonacci number.");
} else {
System.out.println(num + " is not a Fibonacci number.");
}
scanner.close();
}
}
Schauen wir uns die neuen Teile dieses Codes an:
public static boolean isPerfectSquare(int n)
: Dies ist eine Hilfsfunktion, die eine Ganzzahl n
nimmt und true
zurückgibt, wenn n
eine perfekte Quadratzahl ist, und false
sonst. Sie berechnet die Ganzzahl-Wurzel und prüft, ob das Quadrat dieser Wurzel die ursprüngliche Zahl ergibt.
public static boolean isFibonacci(int n)
: Diese Funktion implementiert die mathematische Formel. Sie berechnet 5*n*n + 4
und 5*n*n - 4
und verwendet die isPerfectSquare
-Funktion, um zu prüfen, ob eines der Ergebnisse eine perfekte Quadratzahl ist. Der ||
-Operator bedeutet "oder".
- Die
main
-Methode fordert jetzt den Benutzer auf, eine Zahl einzugeben, ruft die isFibonacci
-Funktion auf und gibt das Ergebnis aus.
-
Speichern Sie die Datei CheckFibonacci.java
.
-
Kompilieren Sie das neue Programm im Terminal:
javac CheckFibonacci.java
-
Führen Sie das kompilierte Programm aus:
java CheckFibonacci
Das Programm wird Sie auffordern, eine Zahl einzugeben. Geben Sie eine Zahl ein (z.B. 13) und drücken Sie die Eingabetaste.
Beispiel 1 (Fibonacci-Zahl):
Enter a number to check if it is a Fibonacci number: 13
13 is a Fibonacci number.
Beispiel 2 (Keine Fibonacci-Zahl):
Enter a number to check if it is a Fibonacci number: 10
10 is not a Fibonacci number.
Diese Methode ist bei der Prüfung, ob eine einzelne große Zahl eine Fibonacci-Zahl ist, viel effizienter als die Generierung der Folge bis zu dieser Zahl.