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:
A Quick JUnit vs TestNG Comparison
Anonymous Classes in Java
Tạo ứng dụng Java RESTful Client với thư viện Retrofit
Introduction to Using FreeMarker in Spring MVC
Recommended Package Structure of a Spring Boot Project
RegEx for matching Date Pattern in Java
Java Program to Implement Interpolation Search Algorithm
Creating a Generic Array in Java
Java Program to Implement Best-First Search
Guide to Apache Commons CircularFifoQueue
Wiring in Spring: @Autowired, @Resource and @Inject
Spring Boot - Twilio
Bootstrap a Web Application with Spring 5
Java Program to Implement Sieve Of Eratosthenes
Java Program to Implement Sorted Array
Quick Guide to Spring Controllers
Giới thiệu Google Guice – Injection, Scope
Form Validation with AngularJS and Spring MVC
Java Program to Compute Cross Product of Two Vectors
Check If Two Lists are Equal in Java
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Converting between an Array and a List in Java
Java Program to Construct K-D Tree for 2 Dimensional Data
SOAP Web service: Authentication trong JAX-WS
Java Program to Generate Random Hexadecimal Byte
HttpClient Connection Management
Converting a List to String in Java
Java 8 Stream findFirst() vs. findAny()
Java Program to Perform Partial Key Search in a K-D Tree
Java Program to Implement Bubble Sort
Control the Session with Spring Security
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching