Given a number N, the task is to find units place digit of the first N natural numbers factorials, i.e. 1!+2!+3!+….N! where N<=10e18.
Examples:
Input: n = 2 Output: 3 1! + 2! = 3 Last digit is 3 Input: n = 3 Output: 9 1! + 2! + 3! = 9 Last digit is 9
Naive Approach: In this approach, simply calculate factorial of each number and find sum of these. Finally get the unit place digit of sum. This will take a lot of time and unnecessary calculations.
Efficient Approach: In this approach, only unit’s digit of N is to be calculated in the range [1, 5], because:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
so on.
As 5!=120, and factorial of number greater than 5 have trailing zeros. So, N>=5 doesn’t contribrute in unit place while doing sum.
Therefore:
if (n < 5) ans = (1 ! + 2 ! +..+ n !) % 10; else ans = (1 ! + 2 ! + 3 ! + 4 !) % 10; Note : We know (1! + 2! + 3! + 4!) % 10 = 3 So we always return 3 when n is greater than 4.
Below is the implementation of the efficient approach:
C++
// C++ program to find the unit place digit // of the first N natural numbers factorials #include <iostream> using namespace std; // Function to find the unit's place digit int get_unit_digit( long long int N) { // Let us write for cases when // N is smaller than or equal // to 4. if (N == 0 || N == 1) return 1; else if (N == 2) return 3; else if (N == 3) return 9; // We know following // (1! + 2! + 3! + 4!) % 10 = 3 else // (N >= 4) return 3; } // Driver code int main() { long long int N = 1; for (N = 0; N <= 10; N++) cout << "For N = " << N << " : " << get_unit_digit(N) << endl; return 0; } |
Java
// Java program to find the unit place digit // of the first N natural numbers factorials import java.io.*; class GFG { // Function to find the unit's place digit static int get_unit_digit( int N) { // Let us write for cases when // N is smaller than or equal // to 4. if (N == 0 || N == 1 ) return 1 ; else if (N == 2 ) return 3 ; else if (N == 3 ) return 9 ; // We know following // (1! + 2! + 3! + 4!) % 10 = 3 else // (N >= 4) return 3 ; } // Driver code public static void main (String[] args) { int N = 1 ; for (N = 0 ; N <= 10 ; N++) System.out.println ( "For N = " + N + " : " + get_unit_digit(N)); } } //This Code is Contributed by ajit |
Python3
# Python3 program to find the unit # place digit of the first N natural # numbers factorials # Function to find the unit's place digit def get_unit_digit(N): # Let us write for cases when # N is smaller than or equal # to 4. if (N = = 0 or N = = 1 ): return 1 elif (N = = 2 ): return 3 elif (N = = 3 ): return 9 # We know following # (1! + 2! + 3! + 4!) % 10 = 3 else : return 3 # Driver code N = 1 for N in range ( 11 ): print ( "For N = " , N, ":" , get_unit_digit(N), sep = ' ' ) # This code is contributed # by sahilshelangia |
C#
// C# program to find the unit // place digit of the first N // natural numbers factorials using System; class GFG { // Function to find the unit's // place digit static int get_unit_digit( int N) { // Let us write for cases when // N is smaller than or equal // to 4. if (N == 0 || N == 1) return 1; else if (N == 2) return 3; else if (N == 3) return 9; // We know following // (1! + 2! + 3! + 4!) % 10 = 3 else // (N >= 4) return 3; } // Driver code static public void Main () { int N = 1; for (N = 0; N <= 10; N++) Console.WriteLine ( "For N = " + N + " : " + get_unit_digit(N)); } } // This Code is Contributed by akt_mit |
PHP
<?php // PHP program to find the unit place digit // of the first N natural numbers factorials // Function to find the unit's place digit function get_unit_digit( $N ) { // Let us write for cases when // N is smaller than or equal // to 4. if ( $N == 0 || $N == 1) return 1; else if ( $N == 2) return 3; else if ( $N == 3) return 9; // We know following // (1! + 2! + 3! + 4!) % 10 = 3 else // (N >= 4) return 3; } // Driver code $N = 1; for ( $N = 0; $N <= 10; $N ++) echo "For N = " . $N . " : " . get_unit_digit( $N ) . "\n" ; // This code is contributed // by ChitraNayal ?> |
Javascript
<script> // Javascript program to find the unit place digit // of the first N natural numbers factorials // Function to find the unit's place digit function get_unit_digit(N) { // Let us write for cases when // N is smaller than or equal // to 4. if (N == 0 || N == 1) return 1; else if (N == 2) return 3; else if (N == 3) return 9; // We know following // (1! + 2! + 3! + 4!) % 10 = 3 else // (N >= 4) return 3; } // Driver code var N = 1; for (N = 0; N <= 10; N++) document.write( "For N = " + N + " : " + get_unit_digit(N)+ "<br>" ) </script> |
For N = 0 : 1 For N = 1 : 1 For N = 2 : 3 For N = 3 : 9 For N = 4 : 3 For N = 5 : 3 For N = 6 : 3 For N = 7 : 3 For N = 8 : 3 For N = 9 : 3 For N = 10 : 3
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.