Find last two digits of sum of N factorials - GeeksforGeeks

12 Apr, 2021
Given a number N, the task is to find unit and tens places digit of the first N natural numbers factorials, i.e last last two digit of 1!+2!+3!+....N! where N<=10e18.Examples:  
Input : n = 2 
Output :3
1! + 2! = 3
Last two digit  is 3

Input :4
Output :33
1!+2!+3!+4!=33
Last two digit is 33
 
Naive Approach:In this approach, simply calculate factorial of each number and find sum of these. Finally get the unit and tens place digit of 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 3 when n is greater than 4.
Below is the implementation of above approach. 
C++
Java
Python3
C#
PHP
Javascript
// 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 digitint 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 codeint 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 program to find the unit place digit//of the first N natural numbers factorialspublic 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 program to find the unit# place digit of the first N natural# numbers factorials # Function to find the unit's# and ten's place digitdef 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 CodeN = 1for N in range(1, 11):    print("For N = ", N, ": ",           get_last_two_digit(N), sep = ' ') # This code is contributed# by sahilshelangia
// C# program to find the unit// place digit of the first N// natural numbers factorialsusing System; class GFG{ // Function to find the unit's// and ten's place digitstatic 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 = 13else // (N >= 10)    return 13;} // Driver codepublic 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 program to find the unit place digit// of the first N natural numbers factorials // Function to find the unit's// and ten's place digitfunction 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)
<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 digitfunction 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>
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
 
sahilshelangia
ukasp
Akanksha_Rai
mayanktyagi1709
factorial
Modular Arithmetic
number-digits
Mathematical
Mathematical
Modular Arithmetic
factorial
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to find GCD or HCF of two numbers
Modulo Operator (%) in C/C++ with Examples
Merge two sorted arrays
Prime Numbers
Program to find sum of elements in a given array
Program for factorial of a number
Operators in C / C++
Program for Decimal to Binary Conversion
Euclidean algorithms (Basic and Extended)
Algorithm to solve Rubik's Cube