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:
Giới thiệu JDBC Connection Pool
Build a REST API with Spring and Java Config
Introduction to Thread Pools in Java
Template Engines for Spring
Java Program to Find Median of Elements where Elements are Stored in 2 Different Arrays
Introduction to Project Reactor Bus
Disable Spring Data Auto Configuration
Java Program to Check for balanced parenthesis by using Stacks
Guide to java.util.Formatter
Transactions with Spring and JPA
Chuyển đổi từ HashMap sang ArrayList
Show Hibernate/JPA SQL Statements from Spring Boot
Converting Iterator to List
Performance Difference Between save() and saveAll() in Spring Data
Guide to CountDownLatch in Java
How to Iterate Over a Stream With Indices
Java Program to Print only Odd Numbered Levels of a Tree
Java Program to Use rand and srand Functions
HttpClient with SSL
Spring Cloud – Tracing Services with Zipkin
Check if there is mail waiting
Adding Parameters to HttpClient Requests
Hướng dẫn Java Design Pattern – Command
Hướng dẫn Java Design Pattern – Dependency Injection
Java Program to Implement Hash Trie
Creating a Generic Array in Java
Spring Data – CrudRepository save() Method
Hướng dẫn sử dụng lớp Console trong java
Most commonly used String methods in Java
Object Type Casting in Java
Introduction to Spring Data MongoDB
Anonymous Classes in Java