GeeksforGeeks App
Open App
Browser
Continue

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 :
Output : 4

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

A naive approach is using 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 O(log n) method to find i^i and then add it.
Below is the implementation of the above approach.

C++

 `/// C++ program to find the hyperfactorial``// of a number``#include ` `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;``}`

Java

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

Python3

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

C#

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

PHP

 ``

Javascript

 ``

Output:

`86400000`

Time complexity:O(N * log N)
Auxiliary Space: O(1)

Since hyper-factorials of numbers 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++

 `// C++ program to find the hyperfactorial``// of a number using boost libraries``#include ``#include ` `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;``}`

Java

 `// Java program to find the hyperfactorial``// of a number ` `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`

Python3

 `# 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``):``        ``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`

C#

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

PHP

 ``

Javascript

 ``

Output:

`86400000`

Time Complexity: O(N2), where N is the given number.
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up