Product of all the pairs from the given array - GeeksforGeeks

14 May, 2021
Given an array arr[] of N integers, the task is to find the product of all the pairs possible from the given array such as: 
(arr[i], arr[i]) is also considered as a valid pair.
(arr[i], arr[j]) and (arr[j], arr[i]) are considered as two different pairs.
Print the resultant answer modulus 10^9+7.
Examples:  
Input: arr[] = {1, 2} Output: 16 Explanation: All valid pairs are (1, 1), (1, 2), (2, 1) and (2, 2). Hence, 1 * 1 * 1 * 2 * 2 * 1 * 2 * 2 = 16
Input: arr[] = {1, 2, 3} Output: 46656 Explanation: All valid pairs are (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2) and (3, 3). Hence the product is 1*1*1**2*1*3*2*1*2*2*2*3*3*1*3*2*3*3 = 46656 
Naive Approach: To solve the problem mentioned above the naive method is to find all the possible pairs and calculate the product of the elements of each pair.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation to find the// product of all the pairs from// the given array #include <bits/stdc++.h>using namespace std;#define mod 1000000007 // Function to return the product of// the elements of all possible pairs// from the arrayint productPairs(int arr[], int n){     // To store the required product    int product = 1;     // Nested loop to calculate all    // possible pairs    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {             // Multiply the product of            // the elements of the            // current pair            product *= (arr[i] % mod                        * arr[j] % mod)                       % mod;            product = product % mod;        }    }     // Return the final result    return product % mod;} // Driver codeint main(){    int arr[] = { 1, 2, 3 };     int n = sizeof(arr) / sizeof(arr[0]);     cout << productPairs(arr, n);     return 0;}
// Java implementation to find the// product of all the pairs from// the given arrayimport java.util.*; class GFG{     static final int mod = 1000000007; // Function to return the product of// the elements of all possible pairs// from the arraystatic int productPairs(int arr[], int n){     // To store the required product    int product = 1;     // Nested loop to calculate all    // possible pairs    for(int i = 0; i < n; i++)    {       for(int j = 0; j < n; j++)       {                     // Multiply the product          // of the elements of the          // current pair          product *= (arr[i] % mod *                      arr[j] % mod) % mod;          product = product % mod;       }    }     // Return the final result    return product % mod;} // Driver codepublic static void main(String[] args){    int arr[] = { 1, 2, 3 };    int n = arr.length;     System.out.print(productPairs(arr, n));}} // This code is contributed by sapnasingh4991
# Python3 implementation to find the# product of all the pairs from# the given arraymod = 1000000007; # Function to return the product of# the elements of all possible pairs# from the arraydef productPairs(arr, n):       # To store the required product    product = 1;     # Nested loop to calculate all    # possible pairs    for i in range(n):        for j in range(n):                       # Multiply the product            # of the elements of the            # current pair            product *= (arr[i] % mod *                        arr[j] % mod) % mod;            product = product % mod;     # Return the final result    return product % mod; # Driver codeif __name__ == '__main__':    arr = [1, 2, 3];    n = len(arr);     print(productPairs(arr, n)); # This code is contributed by 29AjayKumar
// C# implementation to find the// product of all the pairs from// the given arrayusing System;class GFG{     static readonly int mod = 1000000007; // Function to return the product of// the elements of all possible pairs// from the arraystatic int productPairs(int []arr, int n){     // To store the required product    int product = 1;     // Nested loop to calculate all    // possible pairs    for(int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)        {                             // Multiply the product            // of the elements of the            // current pair            product *= (arr[i] % mod *                        arr[j] % mod) % mod;            product = product % mod;        }    }     // Return the readonly result    return product % mod;} // Driver codepublic static void Main(String[] args){    int []arr = { 1, 2, 3 };    int n = arr.Length;     Console.Write(productPairs(arr, n));}} // This code is contributed by sapnasingh4991
<script> //Javascript implementation to find the// product of all the pairs from// the given array mod = 1000000007 // Function to return the product of// the elements of all possible pairs// from the arrayfunction productPairs(arr, n){     // To store the required product    let product = 1;     // Nested loop to calculate all    // possible pairs    for (let i = 0; i < n; i++) {        for (let j = 0; j < n; j++) {             // Multiply the product of            // the elements of the            // current pair            product *= (arr[i] % mod                        * arr[j] % mod)                    % mod;            product = product % mod;        }    }     // Return the final result    return product % mod;} // Driver code    let arr = [ 1, 2, 3 ];     let n = arr.length;     document.write(productPairs(arr, n)); // This code is contributed by Mayank Tyagi </script>
Time Complexity: O(N2)
Efficient approach: We can observe that each element appears exactly (2 * N) times as one of the elements of a pair (X, Y). Exactly N times as X and exactly N times as Y.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation to Find the product// of all the pairs from the given array#include <bits/stdc++.h>using namespace std;#define mod 1000000007#define ll long long int // Function to calculate// (x^y)%1000000007int power(int x, unsigned int y){    int p = 1000000007;     // Initialize result    int res = 1;     // Update x if it is more than    // or equal to p    x = x % p;     while (y > 0) {        // If y is odd, multiply x        // with result        if (y & 1)            res = (res * x) % p;         y = y >> 1;        x = (x * x) % p;    }     // Return the final result    return res;} // Function to return the product// of the elements of all possible// pairs from the arrayll productPairs(ll arr[], ll n){     // To store the required product    ll product = 1;     // Iterate for every element    // of the array    for (int i = 0; i < n; i++) {         // Each element appears (2 * n) times        product            = (product               % mod               * (int)power(                     arr[i], (2 * n))               % mod)              % mod;    }     return product % mod;} // Driver codeint main(){    ll arr[] = { 1, 2, 3 };    ll n = sizeof(arr) / sizeof(arr[0]);     cout << productPairs(arr, n);     return 0;}
// Java implementation to Find the product// of all the pairs from the given arrayimport java.util.*; class GFG{static final int mod = 1000000007; // Function to calculate// (x^y)%1000000007static int power(int x, int y){    int p = 1000000007;     // Initialize result    int res = 1;     // Update x if it is more than    // or equal to p    x = x % p;     while (y > 0)    {                 // If y is odd, multiply x        // with result        if (y % 2 == 1)            res = (res * x) % p;         y = y >> 1;        x = (x * x) % p;    }     // Return the final result    return res;} // Function to return the product// of the elements of all possible// pairs from the arraystatic int productPairs(int arr[], int n){     // To store the required product    int product = 1;     // Iterate for every element    // of the array    for (int i = 0; i < n; i++)    {         // Each element appears (2 * n) times        product = (product % mod *                  (int)power(arr[i],                            (2 * n)) % mod) % mod;    }     return product % mod;} // Driver codepublic static void main(String[] args){    int arr[] = { 1, 2, 3 };    int n = arr.length;     System.out.print(productPairs(arr, n));}} // This code is contributed by amal kumar choubey
# Python3 implementation to Find the product# of all the pairs from the given arraymod = 1000000007 # Function to calculate# (x^y)%1000000007def power(x, y):     p = 1000000007     # Initialize result    res = 1     # Update x if it is more than    # or equal to p    x = x % p     while (y > 0):                 # If y is odd, multiply x        # with result        if ((y & 1) != 0):            res = (res * x) % p         y = y >> 1        x = (x * x) % p     # Return the final result    return res # Function to return the product# of the elements of all possible# pairs from the arraydef productPairs(arr, n):     # To store the required product    product = 1     # Iterate for every element    # of the array    for i in range(n):         # Each element appears (2 * n) times        product = (product % mod *          (int)(power(arr[i], (2 * n))) %                            mod) % mod     return (product % mod)     # Driver codearr = [ 1, 2, 3 ]n = len(arr) print(productPairs(arr, n)) # This code is contributed by divyeshrabadiya07
// C# implementation to Find the product// of all the pairs from the given arrayusing System;class GFG{const int mod = 1000000007; // Function to calculate// (x^y)%1000000007static int power(int x, int y){    int p = 1000000007;     // Initialize result    int res = 1;     // Update x if it is more than    // or equal to p    x = x % p;     while (y > 0)    {                 // If y is odd, multiply x        // with result        if (y % 2 == 1)            res = (res * x) % p;         y = y >> 1;        x = (x * x) % p;    }     // Return the final result    return res;} // Function to return the product// of the elements of all possible// pairs from the arraystatic int productPairs(int []arr, int n){     // To store the required product    int product = 1;     // Iterate for every element    // of the array    for (int i = 0; i < n; i++)    {         // Each element appears (2 * n) times        product = (product % mod *                  (int)power(arr[i],                            (2 * n)) % mod) % mod;    }     return product % mod;} // Driver codepublic static void Main(){    int []arr = { 1, 2, 3 };    int n = arr.Length;     Console.Write(productPairs(arr, n));}} // This code is contributed by Code_Mech
<script> // Javascript implementation to Find the product// of all the pairs from the given array  let mod = 1000000007; // Function to calculate// (x^y)%1000000007function power(x, y){    let p = 1000000007;      // Initialize result    let res = 1;      // Update x if it is more than    // or equal to p    x = x % p;      while (y > 0)    {                  // If y is odd, multiply x        // with result        if (y % 2 == 1)            res = (res * x) % p;          y = y >> 1;        x = (x * x) % p;    }      // Return the final result    return res;}  // Function to return the product// of the elements of all possible// pairs from the arrayfunction productPairs(arr, n){      // To store the required product    let product = 1;      // Iterate for every element    // of the array    for (let i = 0; i < n; i++)    {          // Each element appears (2 * n) times        product = (product % mod *                  power(arr[i],                            (2 * n)) % mod) % mod;    }      return product % mod;}    // Driver Code         let arr = [ 1, 2, 3 ];    let n = arr.length;      document.write(productPairs(arr, n));     </script>
Time Complexity: O(N) 
sapnasingh4991
Amal Kumar Choubey
Code_Mech
29AjayKumar
divyeshrabadiya07
mayanktyagi1709
susmitakundugoaldanga
Arrays
Mathematical
School Programming
Arrays
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Program for Fibonacci numbers
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7
Merge two sorted arrays