Dado un entero positivo N , la tarea es imprimir el factorial exponencial de N . Dado que la salida puede ser muy grande, imprima el módulo de respuesta 1000000007 .
Ejemplos:
Entrada: N = 4
Salida: 262144Entrada: N = 3
Salida: 9
Enfoque: El problema dado se puede resolver con base en las siguientes observaciones:
El factorial exponencial se define por la relación de recurrencia:
- .
Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos res , como 1 para almacenar el factorial exponencial de N.
- Iterar sobre el rango [2, N] usando la variable i y en cada iteración actualizar el res como res = i res %1000000007.
- Finalmente, después de completar el paso anterior, imprima la respuesta obtenida en res .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find exponential factorial // of a given number int ExpoFactorial(int N) { // Stores the exponential factor of N int res = 1; int mod = 1000000007; // Iterate over the range [2, N] for (int i = 2; i < N + 1; i++) // Update res res = (int)pow(i, res) % mod; // Return res return res; } // Driver Code int main() { // Input int N = 4; // Function call cout << (ExpoFactorial(N)); // This code is contributed by Potta Lokesh return 0; } // This code is contributed by lokesh potta
Java
// Java program for the above approach class GFG{ // Function to find exponential factorial // of a given number static int ExpoFactorial(int N) { // Stores the exponential factor of N int res = 1; int mod = 1000000007; // Iterate over the range [2, N] for(int i = 2; i < N + 1; i++) // Update res res = (int)Math.pow(i, res) % mod; // Return res return res; } // Driver code public static void main(String[] args) { // Input int N = 4; // Function call System.out.println((ExpoFactorial(N))); } } // This code is contributed by abhinavjain194
Python3
# Python3 program for the above approach # Function to find exponential factorial # of a given number def ExpoFactorial(N): # Stores the exponential factor of N res = 1 mod = (int)(1000000007) # Iterate over the range [2, N] for i in range(2, N + 1): # Update res res = pow(i, res, mod) # Return res return res # Driver Code # Input N = 4 # Function call print(ExpoFactorial(N))
C#
// C# program for the above approach using System; class GFG{ // Function to find exponential factorial // of a given number static int ExpoFactorial(int N) { // Stores the exponential factor of N int res = 1; int mod = 1000000007; // Iterate over the range [2, N] for(int i = 2; i < N + 1; i++) // Update res res = (int)Math.Pow(i, res) % mod; // Return res return res; } // Driver Code public static void Main() { // Input int N = 4; // Function call Console.Write(ExpoFactorial(N)); } } // This code is contributed by sanjoy_62.
Javascript
<script> // JavaScript program for the above approach // Function to find exponential factorial // of a given number function ExpoFactorial(N) { // Stores the exponential factor of N let res = 1; let mod = 1000000007; // Iterate over the range [2, N] for (let i = 2; i < N + 1; i++) // Update res res = Math.pow(i, res) % mod; // Return res return res; } // Driver Code // Input let N = 4; // Function call document.write((ExpoFactorial(N))); // This code is contributed by _saurabh_jaiswal </script>
Producción
262144
Complejidad de tiempo: O(N*log(N))
Espacio auxiliar: O(1)