Open In App

Find last two digits of sum of N factorials

Last Updated : 28 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N, the task is to find the unit and tens places digit of the first N natural numbers factorials, i.e last two digit of 1!+2!+3!+….N! where N<=10e18.

Examples: 

Input: n = 2 
Output: 3
Explanation: 1! + 2! = 3, Last two digits are 3

Input: 4
Output: 33
Explanation: 1!+2!+3!+4!=33, Last two digits are 33

 

Naive Approach: In this approach, simply calculate the factorial of each number and find the sum of these. Finally, get the unit and tens place the digit of the sum. This will take a lot of time and unnecessary calculations.

Efficient Approach: In this approach, only unit’s and ten’s digit of N is to be calculated in the range [1, 10], because: 
1! = 1 
2! = 2 
3! = 6 
4! = 24 
5! = 120 
6! = 720 
7! = 5040 
8!=40320 
9!=362880 
10!=3628800 
so on.
As 10 != 3628800, and factorial of number greater than 10 have two trailing zeros. So, N>=10 doesn’t contribute in unit and tens place while doing sum.
Therefore, 
 

if (n < 10) 
ans = (1 ! + 2 ! +..+ n !) % 100; 
else 
ans = (1 ! + 2 ! + 3 ! + 4 !+ 5 ! + 6 ! + 7 ! + 8 ! + 9 ! + 10 !) % 100;
Note: We know (1! + 2! + 3! + 4!+…+10!) % 100 = 13 
So we always return 13 when n is greater than 9.

Below is the implementation of the above approach.
 

C++




// C++ program to find the unit place digit
// of the first N natural numbers factorials
#include <iostream>
using namespace std;
#define ll long int
// Function to find the unit's and ten's place digit
int get_last_two_digit(long long int N)
{
 
    // Let us write for cases when
    // N is smaller than or equal
    // to 10.
    if (N <= 10) {
        ll ans = 0, fac = 1;
        for (int i = 1; i <= N; i++) {
            fac = fac * i;
            ans += fac;
        }
        return ans % 100;
    }
 
    // We know following
    // (1! + 2! + 3! + 4!...+10!) % 100 = 13
    else // (N >= 10)
        return 13;
}
 
// Driver code
int main()
{
    long long int N = 1;
    for (N = 1; N <= 10; N++)
        cout << "For N = " << N
             << " : " << get_last_two_digit(N)
             << endl;
 
    return 0;
}


Java




//Java program to find the unit place digit
//of the first N natural numbers factorials
public class AAA {
 
    //Function to find the unit's and ten's place digit
    static int get_last_two_digit(long N)
    {
 
     // Let us write for cases when
     // N is smaller than or equal
     // to 10.
     if (N <= 10) {
         long ans = 0, fac = 1;
         for (int i = 1; i <= N; i++) {
             fac = fac * i;
             ans += fac;
         }
         return (int)ans % 100;
     }
 
     // We know following
     // (1! + 2! + 3! + 4!...+10!) % 100 = 13
     else // (N >= 10)
         return 13;
    }
 
    //Driver code
    public static void main(String[] args) {
         
        long N = 1;
         for (N = 1; N <= 10; N++)
             System.out.println( "For N = " + N
                  + " : " + get_last_two_digit(N));
    }
 
}


Python3




# Python3 program to find the unit
# place digit of the first N natural
# numbers factorials
 
# Function to find the unit's
# and ten's place digit
def get_last_two_digit(N):
     
    # Let us write for cases when
    # N is smaller than or equal
    # to 10
    if N <= 10:
        ans = 0
        fac = 1
        for i in range(1, N + 1):
            fac = fac * i
            ans += fac
        ans = ans % 100
        return ans
         
    # We know following
    # (1! + 2! + 3! + 4!...+10!) % 100 = 13
    # // (N >= 10)
    else:
        return 13
 
# Driver Code
N = 1
for N in range(1, 11):
    print("For N = ", N, ": ",
           get_last_two_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
// and ten's place digit
static int get_last_two_digit(long N)
{
 
// Let us write for cases when
// N is smaller than or equal
// to 10.
if (N <= 10)
{
    long ans = 0, fac = 1;
    for (int i = 1; i <= N; i++)
    {
        fac = fac * i;
        ans += fac;
    }
    return (int)ans % 100;
}
 
// We know following
// (1! + 2! + 3! + 4!...+10!) % 100 = 13
else // (N >= 10)
    return 13;
}
 
// Driver code
public static void Main()
{
    long N = 1;
    for (N = 1; N <= 10; N++)
        Console.WriteLine( "For N = " + N +
            " : " + get_last_two_digit(N));
}
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)


PHP




<?php
// PHP program to find the unit place digit
// of the first N natural numbers factorials
 
// Function to find the unit's
// and ten's place digit
function get_last_two_digit($N)
{
 
    // Let us write for cases when
    // N is smaller than or equal
    // to 10.
    if ($N <= 10)
    {
        $ans = 0; $fac = 1;
        for ($i = 1; $i <= $N; $i++)
        {
            $fac = $fac * $i;
            $ans += $fac;
        }
        return $ans % 100;
    }
 
    // We know following
    // (1! + 2! + 3! + 4!...+10!) % 100 = 13
    else // (N >= 10)
        return 13;
}
 
// Driver code
$N = 1;
for ($N = 1; $N <= 10; $N++)
    echo "For N = " . $N . " : " .
          get_last_two_digit($N) . "\n";
 
// This code is contributed
// by Akanksha Rai(Abby_akku)


Javascript




<script>
 
// Javascript program to find the unit place digit
// of the first N natural numbers factorials
 
// Function to find the unit's and ten's place digit
function get_last_two_digit(N)
{
 
    // Let us write for cases when
    // N is smaller than or equal
    // to 10.
    if (N <= 10) {
        let ans = 0, fac = 1;
        for (let i = 1; i <= N; i++) {
            fac = fac * i;
            ans += fac;
        }
        return ans % 100;
    }
 
    // We know following
    // (1! + 2! + 3! + 4!...+10!) % 100 = 13
    else // (N >= 10)
        return 13;
}
 
// Driver code
 
    let N = 1;
    for (N = 1; N <= 10; N++)
        document.write("For N = " + N
            + " : " + get_last_two_digit(N)
            + "<br>");
 
// This code is contributed by Mayank Tyagi
 
</script>


Output: 

For N = 1 : 1
For N = 2 : 3
For N = 3 : 9
For N = 4 : 33
For N = 5 : 53
For N = 6 : 73
For N = 7 : 13
For N = 8 : 33
For N = 9 : 13
For N = 10 : 13

 

Time Complexity: O(1), the loop can run for a maximum of 100 times in the worst case.
Auxiliary Space: O(1) as no extra space is used.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads