Factorial exponencial de N

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

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

  • a_n=n^{a_{n-1}}               .

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)

Publicación traducida automáticamente

Artículo escrito por spp____ 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 *