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 : 4Input : 4
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 <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; } |
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
<?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) ?> |
Javascript
<script> // Javascript program to find the // hyperfactorial of a number // function to calculate the // value of hyperfactorial function boost_hyperfactorial(num) { // initialise the // val to 1 let val = 1; for (let i = 1; i <= num; i++) { val = val * Math.pow(i, i); } // returns the hyperfactorial // of a number return val; } // Driver code let num = 5; document.write(boost_hyperfactorial(num)); // This code is contributed // by gfgking </script> |
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 <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; } |
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
<?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 ?> |
Javascript
<script> // Javascript 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 var val = 1; for ( var i = 1; i <= num; i++) { for ( var j = 1; j <= i; j++) { // 1^1*2^2*3^3.... val *= i; } } // returns the hyperfactorial of a number return val; } // Driver code var num = 5; document.write( boost_hyperfactorial(num)); </script> |
86400000
Time Complexity: O(N2), where N is the given number.
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!