Factorial of an Array of integers

15 Dec, 2021
Given an array with positive integers. The task is to find the factorial of all the array elements. Note: As the numbers would be very large, print them by taking modulus with 109+7.
Examples: 
Input: arr[] = {3, 10, 200, 20, 12}
Output: 6 3628800 722479105 146326063 479001600

Input: arr[] = {5, 7, 10}
Output: 120 5040 3628800 
Naive approach: We know that there is a simple approach to calculate the factorial of a number. We can run a loop for all array values and can find the factorial of every number using the above approach.Time Complexity would be O(N2) Space Complexity would be O(1) 
Efficient Approach: We know that the factorial of a number: 
N! = N*(N-1)*(N-2)*(N-3)*****3*2*1
The recursive formulae to calculate the factorial of a number is: 
fact(N) = N*fact(N-1).
Hence, we will build an array in a bottom-up manner using the above recursion. Once we have stored the values in the array then we can answer the queries in O(1) time. Hence, the overall time complexity would be O(N). We can use this method only if the array values are less than 10^6. Otherwise, we would not be able to store them in an array.
Below is the implementation of the above approach:  
C++
Java
Python3
PHP
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; int MOD = 1000000007 ;int SIZE = 10000;    // vector to store the factorial values// max_element(arr) should be less than SIZEvector<long> fact;  // Function to calculate the factorial// using dynamic programmingvoid factorial(){    int i;    fact.push_back((long)1);    for (i = 1; i <= SIZE; i++)    {          // Calculation of factorial        // As fact[i-1] stores the factorial of n-1        // so factorial of n is fact[i] = (fact[i-1]*i)        fact.push_back((fact[i - 1] * i) % MOD);    }}  // Function to print factorial of every element// of the arrayvoid PrintFactorial(int arr[],int n){    for(int i = 0; i < n; i += 1)    {          // Printing the stored value of arr[i]!        cout << fact[arr[i]] << " ";    }} int main(){    int arr[] = {3, 10, 200, 20, 12};    int n = sizeof(arr) / sizeof(arr[0]);      // Function to store factorial values mod 10**9+7    factorial();      // Function to print the factorial values mod 10**9+7    PrintFactorial(arr,n);     return 0;} // This code is contributed by decode2207.
<script>// Java implementation of the approachimport java.util.*; class Sol{     static int MOD = 1000000007 ;static int SIZE = 10000;  // vector to store the factorial values// max_element(arr) should be less than SIZEstatic Vector<Long> fact = new Vector<Long>(); // Function to calculate the factorial// using dynamic programmingstatic void factorial(){    int i;    fact.add((long)1);    for (i = 1; i <= SIZE; i++)    {         // Calculation of factorial        // As fact[i-1] stores the factorial of n-1        // so factorial of n is fact[i] = (fact[i-1]*i)        fact.add((fact.get(i - 1) * i) % MOD);    }} // Function to print factorial of every element// of the arraystatic void PrintFactorial(int arr[],int n){    for(int i = 0; i < n; i += 1)    {         // Printing the stored value of arr[i]!        System.out.print(fact.get(arr[i])+" ");    }} // Driver codepublic static void main(String args[]){     int arr[] = {3, 10, 200, 20, 12};    int n = arr.length;     // Function to store factorial values mod 10**9+7    factorial();     // Function to print the factorial values mod 10**9+7    PrintFactorial(arr,n);}} // This code is contributed by Arnab Kundu</script>
# Python implementation of the above Approachmod = 1000000007SIZE = 10000 # declaring list initially and making# it 1 i.e for every indexfact = [1]*SIZE # Calculation of factorial using Dynamic programmingdef factorial():       for i in range(1, SIZE):                # Calculation of factorial        # As fact[i-1] stores the factorial of n-1        # so factorial of n is fact[i] = (fact[i-1]*i)               fact[i] = (fact[i-1]*i) % mod # function callfactorial() # Driver codearr=[3,10,200,20,12]for i in arr:    print(fact[i])
<?php// PHP implementation of the approach $MOD = 1000000007 ;$SIZE = 10000 ; // Function to calculate the factorial// using dynamic programmingfunction factorial($fact){    $fact[0] = 1;    for ($i = 1; $i <= $GLOBALS['SIZE']; $i++)    {         // Calculation of factorial        // As fact[i-1] stores the factorial of n-1        // so factorial of n is fact[i] = (fact[i-1]*i)        $fact[$i] = ($fact[$i - 1] * $i) % $GLOBALS['MOD'];    }    return $fact;} // Function to print factorial of every element// of the arrayfunction PrintFactorial($fact, $arr, $n){    for($i = 0; $i < $n; $i++)    {         // Printing the stored value of arr[i]!        echo $fact[$arr[$i]]," ";    }}     // Driver code    // vector to store the factorial values    // max_element(arr) should be less than SIZE    $fact = array_fill(0,$SIZE + 1, 0);     $arr = array(3, 10, 200, 20, 12);    $n = count($arr);     // Function to store factorial values mod 10**9+7    $fact = factorial($fact);     // Function to print the factorial values mod 10**9+7    PrintFactorial($fact,$arr,$n);     // This code is contributed by AnkitRai01?>
// C# implementation of above approachusing System.Collections.Generic;using System; class Sol{     static int MOD = 1000000007 ;static int SIZE = 10000;  // vector to store the factorial values// max_element(arr) should be less than SIZEstatic List<long> fact = new List<long>(); // Function to calculate the factorial// using dynamic programmingstatic void factorial(){    int i;    fact.Add((long)1);    for (i = 1; i <= SIZE; i++)    {         // Calculation of factorial        // As fact[i-1] stores the factorial of n-1        // so factorial of n is fact[i] = (fact[i-1]*i)        fact.Add((fact[i - 1] * i) % MOD);    }} // Function to print factorial of every element// of the arraystatic void PrintFactorial(int []arr,int n){    for(int i = 0; i < n; i += 1)    {         // Printing the stored value of arr[i]!        Console.Write(fact[arr[i]]+" ");    }} // Driver codepublic static void Main(String []args){     int []arr = {3, 10, 200, 20, 12};    int n = arr.Length;     // Function to store factorial values mod 10**9+7    factorial();     // Function to print the factorial values mod 10**9+7    PrintFactorial(arr,n);}} // This code is contributed by 29AjayKumar
// Javascript implementation of the approach let MOD = 1000000007;let SIZE = 10000; // Function to calculate the factorial// using dynamic programmingfunction factorial(fact){    fact[0] = 1;    for (let i = 1; i <= SIZE; i++)    {         // Calculation of factorial        // As fact[i-1] stores the factorial of n-1        // so factorial of n is fact[i] = (fact[i-1]*i)        fact[i] = (fact[i - 1] * i) % MOD;    }    return fact;} // Function to print factorial of every element// of the arrayfunction PrintFactorial(fact, arr, n){    for(let i = 0; i < n; i++)    {         // Printing the stored value of arr[i]!        document.write(fact[arr[i]] + " ");    }}     // Driver code    // vector to store the factorial values    // max_element(arr) should be less than SIZE    let fact = new Array(SIZE + 1).fill(0);     let arr = new Array(3, 10, 200, 20, 12);    let n = arr.length;     // Function to store factorial values mod 10**9+7    fact = factorial(fact);     // Function to print the factorial values mod 10**9+7    PrintFactorial(fact,arr,n);     // This code is contributed by gfgking
6 3628800 722479105 146326063 479001600
 
Time Complexity : O(N) Space Complexity : O(N) 
ankthon
andrew1234
29AjayKumar
gfgking
adnanirshad158
decode2207
amartyaghoshgfg
factorial
Algorithms
Arrays
Mathematical
Recursion
Arrays
Mathematical
Recursion
factorial
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
DSA Sheet by Love Babbar
SDE SHEET - A Complete Guide for SDE Preparation
What is Hashing | A Complete Tutorial
Understanding Time Complexity with Simple Examples
CPU Scheduling in Operating Systems
Arrays in Java
Write a program to reverse an array or string
Maximum and minimum of an array using minimum number of comparisons
Largest Sum Contiguous Subarray
Arrays in C/C++