Hyperfactorial of a number

Given a number, the task is to find the hyperfactorial of a number.

The result of multiplying a given number of consecutive integers from 1 to the given number, each raised to its own power is called hyperfactorial of a number.

H(n)= 1 ^ 1 * 2 ^ 2 * 3 ^ 3 * . . . . . * n ^ n

Examples:



Input : 2
Output : 4

Input : 4
Output : 27648
H(4) = 1^1 * 2^2 * 3^3 * 4^4 = 27648

A naive approach is two use two loops, one to find the summation of i^i and the other to find i^i. But the time complexity will be O(n2).

An efficient approach is to use the inbuilt pow() function or the O(log n) method to find i^i and then add it.

Below is the implementation of the above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

/// C++ program to find the hyperfactorial 
// of a number 
#include <bits/stdc++.h>
  
using namespace std;
#define ll long long 
  
// function to calculate the value of hyperfactorial
ll boost_hyperfactorial(ll num)
{
    // initialise the val to 1
    ll val = 1;
    for (int i = 1; i <= num; i++) {
        val = val * pow(i,i); 
    }
    // returns the hyperfactorial of a number
    return val;
}
  
// Driver code
int main()
{
    int num = 5;
    cout << boost_hyperfactorial(num);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the 
// hyperfactorial of a number 
  
// function to calculate the 
// value of hyperfactorial
class GFG
{
static long boost_hyperfactorial(long num)
{
    // initialise the val to 1
    long val = 1;
    for (int i = 1; i <= num; i++) 
    {
        val = val * (long)Math.pow(i, i); 
    }
      
    // returns the hyperfactorial 
    // of a number
    return val;
}
  
// Driver code
public static void main(String args[])
{
    int num = 5;
    System.out.println(boost_hyperfactorial(num));
}
}
  
// This code is contributed 
// by chandan_jnu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the 
# hyperfactorial of a number 
  
# function to calculate the
# value of hyperfactorial
def boost_hyperfactorial(num):
  
    # initialise the 
    # val to 1
    val = 1;
    for i in range(1, num + 1):
        val = val * pow(i, i); 
      
    # returns the hyperfactorial
    # of a number
    return val;
  
# Driver code
num = 5;
print(boost_hyperfactorial(num));
  
# This code is contributed
# by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the 
// hyperfactorial of a number 
using System;
  
class GFG
{
  
// function to calculate the 
// value of hyperfactorial
static long boost_hyperfactorial(long num)
{
    // initialise the val to 1
    long val = 1;
    for (long i = 1; i <= num; i++) 
    {
        val = val * (long)Math.Pow(i, i);
    }
      
    // returns the hyperfactorial 
    // of a number
    return val;
}
  
// Driver code
public static void Main()
{
    int num = 5;
    Console.WriteLine(boost_hyperfactorial(num));
}
}
  
// This code is contributed 
// by chandan_jnu

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the 
// hyperfactorial of a number 
  
// function to calculate the
// value of hyperfactorial
function boost_hyperfactorial($num)
{
    // initialise the 
    // val to 1
    $val = 1;
    for ($i = 1; $i <= $num; $i++) 
    {
        $val = $val * pow($i, $i); 
    }
      
    // returns the hyperfactorial
    // of a number
    return $val;
}
  
// Driver code
$num = 5;
echo boost_hyperfactorial($num);
  
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>

chevron_right


Output:

86400000

Time-complexity:O(N * log N)

Since hyper-factorials of number can be huge, hence the numbers will overflow. We can use boost libraries in C++ or BigInteger in Java to store the hyper-factorial of a number N.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the hyperfactorial 
// of a number using boost libraries 
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
  
using namespace boost::multiprecision;
using namespace std;
  
// function to calculate the value of hyperfactorial
int1024_t boost_hyperfactorial(int num)
{
    // initialise the val to 1
    int1024_t val = 1;
    for (int i = 1; i <= num; i++) {
        for (int j = 1; j <= i; j++) {
            // 1^1*2^2*3^3....
            val *= i;
        }
    }
    // returns the hyperfactorial of a number
    return val;
}
  
// Driver code
int main()
{
    int num = 5;
    cout << boost_hyperfactorial(num);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the hyperfactorial 
// of a number using boost libraries 
  
import java.io.*;
  
class GFG {
  
// function to calculate the value of hyperfactorial
static int boost_hyperfactorial(int num)
{
    // initialise the val to 1
    int val = 1;
    for (int i = 1; i <= num; i++) {
        for (int j = 1; j <= i; j++) {
            // 1^1*2^2*3^3....
            val *= i;
        }
    }
    // returns the hyperfactorial of a number
    return val;
}
  
// Driver code
  
  
    public static void main (String[] args) {
    int num = 5;
    System.out.println( boost_hyperfactorial(num));
    }
}
// This code is contributed 
// by chandan_jnu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the hyperfactorial 
# of a number using boost libraries 
  
# function to calculate the value of hyperfactorial 
def boost_hyperfactorial(num):
      
    # initialise the val to 1 
    val = 1
    for i in range(1,num+1): 
        for j in range(1,i+1): 
              
            # 1^1*2^2*3^3.... 
            val *= i; 
              
    # returns the hyperfactorial of a number 
    return val; 
  
# Driver code 
num = 5
print( boost_hyperfactorial(num)); 
  
# This code is contributed by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the hyperfactorial 
// of a number using boost libraries 
using System;
  
class GFG 
{
  
// function to calculate the
// value of hyperfactorial
static int boost_hyperfactorial(int num)
{
    // initialise the val to 1
    int val = 1;
    for (int i = 1; i <= num; i++) 
    {
        for (int j = 1; j <= i; j++)
        {
            // 1^1*2^2*3^3....
            val *= i;
        }
    }
      
    // returns the hyperfactorial
    // of a number
    return val;
}
  
// Driver code
public static void Main ()
{
    int num = 5;
    Console.WriteLine(boost_hyperfactorial(num));
}
}
  
// This code is contributed 
// by chandan_jnu

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the hyperfactorial 
// of a number using boost libraries 
  
// function to calculate the value 
// of hyperfactorial
function boost_hyperfactorial($num)
{
    // initialise the val to 1
    $val = 1;
    for ($i = 1; $i <= $num; $i++)
    {
        for ($j = 1; $j <= $i; $j++) 
        {
            // 1^1*2^2*3^3....
            $val *= $i;
        }
    }
      
    // returns the hyperfactorial 
    // of a number
    return $val;
}
  
// Driver code
$num = 5;
echo boost_hyperfactorial($num);
  
// This code is contributed 
// by Mukul Singh
?>

chevron_right


Output:

86400000


My Personal Notes arrow_drop_up

Do your best to show the world what you are capable of

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.