This is a Java Program to Implement Efficient O(log n) Fibonacci generator . This is a program to generate nth fibonacci number with O(log n) complexity.
Here is the source code of the Java Program to Implement Efficient O(log n) Fibonacci generator . The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Efficient O(log n) Fibonacci generator
**/
import java.util.Scanner;
import java.math.BigInteger;
/** Class FibonacciGenerator **/
public class FibonacciGenerator
{
/** function to generate nth fibonacci number **/
public void genFib(long n)
{
BigInteger arr1[][] = {{BigInteger.ONE, BigInteger.ONE}, {BigInteger.ONE, BigInteger.ZERO}};
if (n == 0)
System.out.println("\nFirst Fibonacci number = 0");
else
{
power(arr1, n - 1);
System.out.println("\n"+ n +" th Fibonacci number = "+ arr1[0][0]);
}
}
/** function raise matrix to power n recursively **/
private void power(BigInteger arr1[][], long n)
{
if (n == 0 || n == 1)
return;
BigInteger arr2[][] = {{BigInteger.ONE, BigInteger.ONE}, {BigInteger.ONE, BigInteger.ZERO}};
power(arr1, n / 2);
multiply(arr1, arr1);
if (n % 2 != 0)
multiply(arr1, arr2);
}
/** function to multiply two 2 d matrices **/
private void multiply(BigInteger arr1[][], BigInteger arr2[][])
{
BigInteger x = (arr1[0][0].multiply(arr2[0][0])).add(arr1[0][1].multiply(arr2[1][0]));
BigInteger y = (arr1[0][0].multiply(arr2[0][1])).add(arr1[0][1].multiply(arr2[1][1]));
BigInteger z = (arr1[1][0].multiply(arr2[0][0])).add(arr1[1][1].multiply(arr2[1][0]));
BigInteger w = (arr1[1][0].multiply(arr2[0][1])).add(arr1[1][1].multiply(arr2[1][1]));
arr1[0][0] = x;
arr1[0][1] = y;
arr1[1][0] = z;
arr1[1][1] = w;
}
/** Main function **/
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Efficient Fibonacci Generator\n");
System.out.println("Enter number n to find nth fibonacci number\n");
long n = scan.nextLong();
FibonacciGenerator fg = new FibonacciGenerator();
fg.genFib(n);
}
}
Output:
Efficient Fibonacci Generator Enter number n to find nth fibonacci number 1000 1000 th Fibonacci number = 43466557686937456435688527675040625802564660517371780 40248172908953655541794905189040387984007925516929592259308032263477520968962323 9873322471161642996440906533187938298969649928516003704476137795166849228875
Related posts:
Java Program to Construct an Expression Tree for an Prefix Expression
Spring Boot - Google OAuth2 Sign-In
Hướng dẫn Java Design Pattern – Template Method
Java Program to Find All Pairs Shortest Path
Assertions in JUnit 4 and JUnit 5
Overview of Spring Boot Dev Tools
Java Program to Implement Gale Shapley Algorithm
Guide to Guava Multimap
Từ khóa this và super trong Java
Spring Boot Security Auto-Configuration
Java Program to Find Basis and Dimension of a Matrix
Sorting Query Results with Spring Data
Primitive Type Streams in Java 8
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
Cài đặt và sử dụng Swagger UI
Java Program to Implement Quick Sort Using Randomization
Initialize a HashMap in Java
Spring Boot - Actuator
Create Java Applet to Simulate Any Sorting Technique
Lấy ngày giờ hiện tại trong Java
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Hướng dẫn sử dụng luồng vào ra ký tự trong Java
JWT – Token-based Authentication trong Jersey 2.x
The Registration Process With Spring Security
Anonymous Classes in Java
Spring Cloud – Securing Services
Encode/Decode to/from Base64
Java Program to Implement Sieve Of Atkin
Java Program to Implement Hash Tables with Quadratic Probing
Phương thức forEach() trong java 8
HTTP Authentification and CGI/Servlet
Spring Security – security none, filters none, access permitAll