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