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 Byte Array to InputStream
@Lookup Annotation in Spring
Java Program to Implement the Program Used in grep/egrep/fgrep
New Features in Java 8
Java Program to Implement Sieve Of Atkin
Java IO vs NIO
Java 8 – Powerful Comparison with Lambdas
wait() and notify() Methods in Java
Simultaneous Spring WebClient Calls
How to Set TLS Version in Apache HttpClient
Java Program to Implement Queue
Guide to Selenium with JUnit / TestNG
Comparing Arrays in Java
Removing all duplicates from a List in Java
Model, ModelMap, and ModelAndView in Spring MVC
Java Program to Implement Sorted Doubly Linked List
Spring Webflux and CORS
Hướng dẫn Java Design Pattern – Iterator
HttpAsyncClient Tutorial
Guide to Guava Multimap
Toán tử instanceof trong java
Guide to java.util.concurrent.Future
Java Scanner hasNext() vs. hasNextLine()
A Guide to the Java LinkedList
Using Spring ResponseEntity to Manipulate the HTTP Response
Java Program to Create a Random Linear Extension for a DAG
The Difference Between map() and flatMap()
LinkedHashSet trong java
Spring Data MongoDB Transactions
Finding the Differences Between Two Lists in Java
Java Program to Implement Self organizing List
Uploading MultipartFile with Spring RestTemplate