Open In App

Sum of product of each element with each element after it

Given an array arr[] of n integers. The task is to find the sum of product of each element with each element after it in the array. In other words, find sum of product of each arr[i] with each arr[j] such that j > i.

Examples :  



Input : arr[] = {9, 3, 4, 2}
Output : 107
Explanation: 
Sum of product of arr[0] with arr[1], arr[2], arr[3] is 9*3 + 9*4 + 9*2 = 81
Sum of product of arr[1] with arr[2], arr[3] is 3*4 + 3*2 = 18
Product of arr[2] with arr[3] is 4*2 = 8
Sum of all these sums is 81 + 18 + 8 = 107

Input : arr[] = {3, 5}
Output : 15



Observe to find (p*a + p*b + …..+ p*y + p*z) is equals to p*(a + b ….. y + z). 
So for each i, 0 ? i ? n – 2 we have to calculate arr[i] * (arr[j] + arr[j+1] + ….. + arr[n – 2] + arr[n – 1]), where j = i + 1 and find sum of these. 
We can reduce the complexity of finding (arr[j] + arr[j+1] + ….. + arr[n – 2] + arr[n – 1]) for each ‘i’ by precomputing the suffix sum of the array. 
Lets sum[] stores the suffix sum of the given array i.e sum[i] have arr[i] + arr[i+1] + ….. + arr[n – 2] + arr[n – 1]. 
So, after precompute sum[], we need to find the sum of arr[i]*sum[i + 1] where 0 ? i ? n – 2.

Below is the implementation of this approach: 




// C++ Program to find sum of
// product of each element
// with each element after it
#include <bits/stdc++.h>
using namespace std;
 
// Return sum of product
// of each element with
// each element after it
int findSumofProduct(int arr[], int n)
{
    int sum[n];
    sum[n - 1] = arr[n - 1];
 
    // finding suffix sum
    for (int i = n - 2; i >= 0; i--)
        sum[i] = sum[i + 1] + arr[i];
     
    // finding the sum of product of
    // each element with suffix sum.
    int res = 0;
    for (int i = 0; i < n - 1; i++)
        res += (sum[i + 1] * arr[i]);
 
    return res;
}
 
// Driver Code
int main()
{
    int arr[] = {9, 3, 4, 2};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findSumofProduct(arr, n)
         << endl;
    return 0;
}




// Java Program to find sum of product
// of each element with each element
// after it
class GFG {
     
    // Return sum of product of each
    // element with each element
    // after it
    static int findSumofProduct(int arr[],
                                    int n)
    {
        int sum[] = new int[n];
        sum[n - 1] = arr[n - 1];
     
        // finding suffix sum
        for (int i = n - 2; i >= 0; i--)
            sum[i] = sum[i + 1] + arr[i];
         
        // finding the sum of product of
        // each element with suffix sum.
        int res = 0;
        for (int i = 0; i < n - 1; i++)
            res += (sum[i + 1] * arr[i]);
     
        return res;
    }
     
    // Driver Program
    public static void main(String[] args)
    {
         
        int arr[] = { 9, 3, 4, 2 };
        int n = arr.length;
         
        System.out.println(
                findSumofProduct(arr, n));
    }
}
 
// This code is contributed by
// Smitha Dinesh Semwal




# Python3 Program to find sum of
# product of each element with
# each element after it
 
# Return sum of product of each
# element with each element after it
def findSumofProduct(arr, n):
    sum = [None for _ in range(n)]
    sum[n-1] = arr[n - 1]
 
    # finding suffix sum
    for i in range(n - 2, -1, -1):
        sum[i] = sum[i + 1] + arr[i]
 
    # finding the sum of product of
    # each element with suffix sum.
    res = 0
    for i in range(n - 1):
        res += sum[i + 1] * arr[i]
    return res
 
# Driver Code
arr = [9, 3, 4, 2]
n = len(arr)
print(findSumofProduct(arr, n))
 
# This code is contributed
# by SamyuktaSHegde




// C# Program to find sum of product
// of each element with each element
// after it
using System;
 
class GFG {
     
    // Return sum of product of each
    // element with each element
    // after it
    static int findSumofProduct(int[] arr,
                                    int n)
    {
        int[] sum = new int[n];
        sum[n - 1] = arr[n - 1];
     
        // finding suffix sum
        for (int i = n - 2; i >= 0; i--)
            sum[i] = sum[i + 1] + arr[i];
         
        // finding the sum of product of
        // each element with suffix sum.
        int res = 0;
        for (int i = 0; i < n - 1; i++)
            res += (sum[i + 1] * arr[i]);
     
        return res;
    }
     
    // Driver code
    static public void Main ()
    {
        int[] arr = { 9, 3, 4, 2 };
        int n = arr.Length;
         
        Console.WriteLine(findSumofProduct(arr, n));
    }
}
 
// This code is contributed by Ajit.




<?php
// PHP Program to find sum of
// product of each element
// with each element after it
 
// Return sum of product
// of each element with
// each element after it
function findSumofProduct($arr, $n)
{
     
    $sum = array();
    $sum[$n - 1] = $arr[$n - 1];
 
    // finding suffix sum
    for ( $i = $n - 2; $i >= 0; $i--)
        $sum[$i] = $sum[$i + 1] + $arr[$i];
     
    // finding the sum of product of
    // each element with suffix sum.
    $res = 0;
    for ( $i = 0; $i < $n - 1; $i++)
        $res += ($sum[$i + 1] * $arr[$i]);
 
    return $res;
}
 
    // Driver Code
    $arr = array(9, 3, 4, 2);
    $n = count($arr);
    echo findSumofProduct($arr, $n);
     
// This code is contributed by anuJ_67.
?>




<script>
 
// Javascript Program to find sum of
// product of each element
// with each element after it
 
// Return sum of product
// of each element with
// each element after it
function findSumofProduct(arr, n)
{
    let sum = new Array(n);
    sum[n - 1] = arr[n - 1];
 
    // finding suffix sum
    for (let i = n - 2; i >= 0; i--)
        sum[i] = sum[i + 1] + arr[i];
     
    // finding the sum of product of
    // each element with suffix sum.
    let res = 0;
    for (let i = 0; i < n - 1; i++)
        res += (sum[i + 1] * arr[i]);
 
    return res;
}
 
// Driver Code
 
    let arr = [9, 3, 4, 2];
    let n = arr.length;
    document.write(findSumofProduct(arr, n)
        + "<br>");
 
// This code is contributed by Mayank Tyagi
 
</script>

Output
107

Time complexity: O(n) where n is the size of the given array
Auxiliary space: O(n)

Below is Optimized Code of finding sum of product of each element with each element after it: 




// C++ Program to find sum of
// product of each element
// with each element after it
#include <bits/stdc++.h>
using namespace std;
 
// Return sum of product
// of each element with
// each element after it
int findSumofProduct(int arr[],
                     int n)
{
    int suffix_sum = arr[n - 1];
 
    // Finding product of array
    // elements and suffix sum.
    int res = 0;
    for (int i = n - 2; i >= 0; i--)
    {
 
        res += (suffix_sum * arr[i]);
 
        // finding suffix sum
        suffix_sum += arr[i];
    }
 
    return res;
}
 
// Driver Code
int main()
{
    int arr[] = {9, 3, 4, 2};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findSumofProduct(arr, n)
         << endl;
    return 0;
}




// Java Program to find sum
// of product of each
// element with each
// element after it
import java .io.*;
class GFG {
     
    // Return sum of product of
    // each element with each
    // element after it
    static int findSumofProduct(int[] arr,
                                int n)
    {
        int suffix_sum = arr[n - 1];
     
        // Finding product of array
        // elements and suffix sum.
        int res = 0;
        for (int i = n - 2; i >= 0; i--)
        {
            res += (suffix_sum * arr[i]);
     
            // finding suffix sum
            suffix_sum += arr[i];
        }
     
        return res;
    }
 
    // Driver code
    static public void main(String[] args)
    {
        int[] arr = {9, 3, 4, 2};
        int n = arr.length;
        System.out.println(findSumofProduct(arr, n));
    }
}
 
// This code is contributed by anuj_67.




# Python 3 Program to find sum of
# product of each element
# with each element after it
 
# Return sum of product
# of each element with
# each element after it
def findSumofProduct(arr, n):
    suffix_sum = arr[n - 1]
 
    # Finding product of array
    # elements and suffix sum.
    res = 0
    for i in range(n - 2, -1, -1):
 
        res += (suffix_sum * arr[i])
 
        # finding suffix sum
        suffix_sum += arr[i]
 
    return res;
 
# Driver Code
arr = [9, 3, 4, 2];
n = len(arr);
print(findSumofProduct(arr, n))
 
# This code is contributed
# by Akanksha Rai




// C# Program to find sum
// of product of each
// element with each
// element after it
using System;
 
class GFG {
     
    // Return sum of product of
    // each element with each
    // element after it
    static int findSumofProduct(int[] arr,
                                int n)
    {
        int suffix_sum = arr[n - 1];
     
        // Finding product of array
        // elements and suffix sum.
        int res = 0;
        for (int i = n - 2; i >= 0; i--)
        {
            res += (suffix_sum * arr[i]);
     
            // finding suffix sum
            suffix_sum += arr[i];
        }
     
        return res;
    }
 
    // Driver code
    static public void Main()
    {
        int[] arr = {9, 3, 4, 2};
        int n = arr.Length;
        Console.WriteLine(findSumofProduct(arr, n));
    }
}
 
// This code is contributed by Ajit.




<?php
// PHP Program to find sum of
// product of each element
// with each element after it
 
// Return sum of product
// of each element with
// each element after it
function findSumofProduct($arr,
                          $n)
{
    $suffix_sum = $arr[$n - 1];
 
    // Finding product of array
    // elements and suffix sum.
    $res = 0;
    for ( $i = $n - 2; $i >= 0; $i--)
    {
 
        $res += ($suffix_sum * $arr[$i]);
 
        // finding suffix sum
        $suffix_sum += $arr[$i];
    }
 
    return $res;
}
 
    // Driver Code
    $arr = array(9, 3, 4, 2);
    $n = count($arr);
    echo findSumofProduct($arr, $n)
 
 
// This code is contributed by anuJ_67.
?>




<script>
 
    // Javascript Program to find sum
    // of product of each
    // element with each
    // element after it
     
    // Return sum of product of
    // each element with each
    // element after it
    function findSumofProduct(arr, n)
    {
        let suffix_sum = arr[n - 1];
      
        // Finding product of array
        // elements and suffix sum.
        let res = 0;
        for (let i = n - 2; i >= 0; i--)
        {
            res += (suffix_sum * arr[i]);
      
            // finding suffix sum
            suffix_sum += arr[i];
        }
      
        return res;
    }
     
    let arr = [9, 3, 4, 2];
    let n = arr.length;
    document.write(findSumofProduct(arr, n));
     
</script>

Output
107

Time complexity: O(n) where n is the size of the given array
Auxiliary space: O(1)


Article Tags :