Program to find last two digits of Nth Fibonacci number
Given a number ‘n’, write a function that prints the last two digits of n-th (‘n’ can also be a large number) Fibonacci number.
Examples:
Input : n = 65 Output : 65 Input : n = 365 Output : 65
Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.
A simple solution is to find n-th Fibonacci number and print its last two digit. But N can be very large, so it wouldn’t work.
A better solution is to use the fact that after 300-th Fibonacci number last two digits starts repeating.
1) Find m = n % 300.
2) Return m-th Fibonacci number.
C++
// Program to find last two digits of n-th // Fibonacci number #include<bits/stdc++.h> using namespace std; typedef long long int ll; // Fills f[] with first 300 fibonacci numbers void precomput(ll f[]) { /* 0th and 1st number of the series are 0 and 1*/ f[0] = 0; f[1] = 1; /* Add the previous 2 numbers in the series and store last two digits of result */ for (ll i = 2; i < 300; i++) f[i] = (f[i-1] + f[i-2])%100; } // Returns last two digits of n'th Fibonacci // Number int findLastDigit(ll f[], int n) { return f[n%300]; } /* Driver program to test above function */ int main () { // Precomputing units digit of first 300 // Fibonacci numbers ll f[300] = {0}; precomput(f); ll n = 1; cout << findLastDigit(f, n) << endl; n = 61; cout << findLastDigit(f, n) << endl; n = 7; cout << findLastDigit(f, n) << endl; n = 67; cout << findLastDigit(f, n) << endl; return 0; } |
Java
// Program to find last two digits of // n-th Fibonacci number import java.util.Arrays; class GFG { // Fills f[] with first 300 // fibonacci numbers static void precomput( long f[]) { /* 0th and 1st number of the series are 0 and 1*/ f[ 0 ] = 0 ; f[ 1 ] = 1 ; /* Add the previous 2 numbers in the series and store last two digits of result */ for ( int i = 2 ; i < 300 ; i++) f[i] = (f[i- 1 ] + f[i- 2 ]) % 100 ; } // Returns last two digits of n'th // Fibonacci Number static long findLastDigit( long f[], int n) { return (f[(n% 300 )]); } /* Driver program to test above function */ public static void main (String args[]) { // Precomputing units digit of // first 300 Fibonacci numbers long f[] = new long [ 300 ]; Arrays.fill(f, 0 ); precomput(f); int n = 1 ; System.out.println(findLastDigit(f, n)); n = 61 ; System.out.println(findLastDigit(f, n)); n = 7 ; System.out.println(findLastDigit(f, n)); n = 67 ; System.out.println(findLastDigit(f, n)); } } /*This code is contributed by Nikita Tiwari.*/ |
Python3
# Python code to find last two # digits of n-th Fibonacci number def precomput(f): # 0th and 1st number of the series # are 0 and 1 f.append( 0 ) f.append( 1 ) # Add the previous 2 numbers in the series # and store last two digits of result for i in range ( 2 , 300 ): f.append((f[i - 1 ] + f[i - 2 ]) % 100 ) # Returns last two digits of # n'th Fibonacci Number def findLastDigit(f,n): return f[n % 300 ] # driver code f = list () precomput(f) n = 1 print (findLastDigit(f, n)) n = 61 print (findLastDigit(f, n)) n = 7 print (findLastDigit(f, n)) n = 67 print (findLastDigit(f, n)) # This code is contributed by "Abhishek Sharma 44" |
C#
// Program to find last two digits of // n-th Fibonacci number using System; class GFG { // Fills f[] with first 300 // fibonacci numbers static void precomput( long []f) { /* 0th and 1st number of the series are 0 and 1*/ f[0] = 0; f[1] = 1; /* Add the previous 2 numbers in the series and store last two digits of result */ for ( int i = 2; i < 300; i++) f[i] = (f[i-1] + f[i-2]) % 100; } // Returns last two digits of n'th // Fibonacci Number static long findLastDigit( long []f, int n) { return (f[(n % 300)]); } /* Driver program to test above function */ public static void Main () { // Precomputing units digit of // first 300 Fibonacci numbers long []f = new long [300]; precomput(f); int n = 1; Console.WriteLine(findLastDigit(f, n)); n = 61; Console.WriteLine(findLastDigit(f, n)); n = 7; Console.WriteLine(findLastDigit(f, n)); n = 67; Console.WriteLine(findLastDigit(f, n)); } } // This code is contributed by anuj_67. |
PHP
<?php // Program to find last two // digits of n-th Fibonacci // number // Fills f[] with first // 300 fibonacci numbers function precomput() { /* 0th and 1st number of the series are 0 and 1*/ $f [0] = 0; $f [1] = 1; /* Add the previous 2 numbers in the series and store last two digits of result */ for ( $i = 2; $i < 300; $i ++) $f [ $i ] = ( $f [ $i - 1] + $f [ $i - 2]) % 100; return $f ; } // Returns last two digits // of n'th Fibonacci Number function findLastDigit( $f , $n ) { return $f [ $n % 300]; } // Driver code // Precomputing units digit // of first 300 Fibonacci numbers $f = precomput(); $n = 1; echo findLastDigit( $f , $n ) . "\n" ; $n = 61; echo findLastDigit( $f , $n ) . "\n" ; $n = 7; echo findLastDigit( $f , $n ) . "\n" ; $n = 67; echo findLastDigit( $f , $n ) . "\n" ; // This code is contributed by mits. ?> |
Javascript
<script> // Program to find last two digits of n-th // Fibonacci number // Fills f[] with first 300 fibonacci numbers function precomput(f) { /* 0th and 1st number of the series are 0 and 1*/ f[0] = 0; f[1] = 1; /* Add the previous 2 numbers in the series and store last two digits of result */ for (let i = 2; i < 300; i++) f[i] = (f[i-1] + f[i-2])%100; } // Returns last two digits of n'th Fibonacci // Number function findLastDigit(f, n) { return f[n%300]; } /* Driver program to test above function */ // Precomputing units digit of first 300 // Fibonacci numbers let f = new Uint8Array(300); precomput(f); let n = 1; document.write(findLastDigit(f, n) + "<br>" ); n = 61; document.write(findLastDigit(f, n) + "<br>" ); n = 7; document.write(findLastDigit(f, n) + "<br>" ); n = 67; document.write(findLastDigit(f, n) + "<br>" ); // This code is contributed by Mayank Tyagi </script> |
Output:
1 61 13 53
Time Complexity: O(300), it will run in constant time.
Auxiliary Space: O(300), no extra space is required, so it is a constant.