Encuentre el dígito del lugar de la unidad de la suma de N factoriales

Dado un número N, la tarea es encontrar el dígito del lugar de las unidades de los primeros N factoriales de números naturales, es decir, 1!+2!+3!+….N! donde N<=10e18.
Ejemplos: 
 

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

Enfoque ingenuo: en este enfoque, simplemente calcule el factorial de cada número y encuentre la suma de estos. Finalmente obtenga el dígito del lugar de la unidad de la suma. Esto llevará mucho tiempo y cálculos innecesarios.
Enfoque eficiente: en este enfoque, solo se calculará el dígito de la unidad de N en el rango [1, 5], porque: 
¡1! = 1 
2! = 2 
3! = 6 
4! = 24 
5! = 120 
6! = 720 
7! = 5040 
y así sucesivamente.
Como 5!=120, y el factorial de un número mayor que 5 tienen ceros al final. Entonces, N>=5 no contribuye en el lugar de la unidad mientras se hace la suma.
Por lo tanto: 
 

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.

A continuación se muestra la implementación del enfoque eficiente: 
 

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>
Producción: 

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

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por sahilshelangia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *