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:
Custom Thread Pools In Java 8 Parallel Streams
How to Get the Last Element of a Stream in Java?
Optional trong Java 8
Java Program to Solve any Linear Equations
Spring MVC Setup with Kotlin
The DAO with JPA and Spring
Introduction to Using Thymeleaf in Spring
Java Program to Implement Hash Tables with Double Hashing
Quick Guide to java.lang.System
Upload and Display Excel Files with Spring MVC
Guide to System.gc()
Các nguyên lý thiết kế hướng đối tượng – SOLID
Tính trừu tượng (Abstraction) trong Java
Properties with Spring and Spring Boot
New Features in Java 11
Toán tử instanceof trong java
Java Program to Implement Circular Doubly Linked List
How to Add a Single Element to a Stream
String Processing with Apache Commons Lang 3
Mapping Nested Values with Jackson
Simple Single Sign-On with Spring Security OAuth2
Java Program to Implement Fenwick Tree
Adding a Newline Character to a String in Java
Spring Cloud Bus
Wrapper Classes in Java
Marker Interface trong Java
Sorting in Java
Spring Boot - Cloud Configuration Server
Java Program to Implement Lloyd’s Algorithm
Beans and Dependency Injection
JUnit5 Programmatic Extension Registration with @RegisterExtension
Java Program to Perform Uniform Binary Search