Find the unit place digit of sum of N factorials

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right


Output:

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


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.