Given an array A[] of integers find sum of product of all pairs of array elements i. e., we need to find of product after execution of following pseudo code
product = 0
for i = 1:n
for j = i+1:n
product = product + A[i]*A[j]
Examples:
Input : A[] = {1, 3, 4}
Output : 19
Possible Pairs : (1,3), (1,4), (3,4)
Sum of Product : 1*3 + 1*4 + 3*4 = 19
Naive Solution :
For each index i we loop through j=i+1 to j=n and add A[i]*A[j] each time. Below is implementation for the same.
C++
#include <iostream>
using namespace std;
int findProductSum( int A[], int n)
{
int product = 0;
for ( int i = 0; i < n; i++)
for ( int j = i+1; j < n; j++)
product = product + A[i]*A[j];
return product;
}
int main()
{
int A[] = {1, 3, 4};
int n = sizeof (A)/ sizeof (A[0]);
cout << "sum of product of all pairs "
"of array elements : " << findProductSum(A, n);
return 0;
}
|
Java
import java.io.*;
class test
{
int findProductSum( int A[], int n)
{
int product = 0 ;
for ( int i = 0 ; i < n; i++)
for ( int j = i+ 1 ; j < n; j++)
product = product + A[i]*A[j];
return product;
}
}
class GFG {
public static void main (String[] args) {
int A[] = { 1 , 3 , 4 };
int n = A.length;
test t = new test();
System.out.print( "sum of product of all pairs of array elements : " );
System.out.println(t.findProductSum(A, n));
}
}
|
Python3
def findProductSum(A,n):
product = 0
for i in range (n):
for j in range ( i + 1 ,n):
product = product + A[i] * A[j]
return product
if __name__ = = "__main__" :
A = [ 1 , 3 , 4 ]
n = len (A)
print ( "sum of product of all pairs "
"of array elements : " ,findProductSum(A, n))
|
C#
using System;
class GFG
{
static int findProductSum( int [] A, int n)
{
int product = 0;
for ( int i = 0; i < n; i++)
for ( int j = i + 1; j < n; j++)
product = product + A[i] * A[j];
return product;
}
public static void Main()
{
int [] A = {1, 3, 4};
int n = A.Length;
Console.WriteLine( "sum of product of all " +
"pairs of array elements : " );
Console.WriteLine(findProductSum(A, n));
}
}
|
PHP
<?php
function findProductSum( $A , $n )
{
$product = 0;
for ( $i = 0; $i < $n ; $i ++)
for ( $j = $i + 1; $j < $n ; $j ++)
$product = $product + $A [ $i ] * $A [ $j ];
return $product ;
}
$A = array (1, 3, 4);
$n = sizeof( $A );
echo "sum of product of all pairs " ,
"of array elements : "
,findProductSum( $A , $n );
?>
|
Javascript
<script>
function findProductSum(A, n)
{
let product = 0;
for (let i= 0; i < n; i++)
for (let j = i+1; j < n; j++)
product = product + A[i]*A[j];
return product;
}
let A = [1, 3, 4];
let n = A.length;
document.write( "sum of product of all pairs " +
"of array elements : " + findProductSum(A, n));
</script>
|
Output:
sum of product of all pairs of array elements : 19
Time Complexity : O(n2)
Space Complexity : O(1)
Efficient O(n) solution :
We know that
(a + b + c)2 = a2 + b2 + c2 + 2*(a*b + b*c + c*a)
Let required sum be P
Let E = (a1 + a2 + a3 + a4 ... + an)^2
=> E = a12 + a22 + ... + an2 + 2*(a1*a2 + a1*a3 + ....)
=> E = a12 + a22 + ... + an2 + 2*(P)
=> P = ( E - (a12 + a22 + .... + an2) ) / 2
C++
#include <iostream>
using namespace std;
int findProductSum( int A[], int n)
{
int array_sum = 0;
for ( int i = 0; i < n; i++)
array_sum = array_sum + A[i];
int array_sum_square = array_sum * array_sum;
int individual_square_sum = 0;
for ( int i = 0; i < n; i++)
individual_square_sum += A[i]*A[i];
return (array_sum_square - individual_square_sum)/2;
}
int main()
{
int A[] = {1, 3, 4};
int n = sizeof (A)/ sizeof (A[0]);
cout << "sum of product of all pairs of array "
"elements : " << findProductSum(A, n);
return 0;
}
|
Java
class GFG
{
static int findProductSum( int A[], int n)
{
int array_sum = 0 ;
for ( int i = 0 ; i < n; i++)
array_sum = array_sum + A[i];
int array_sum_square = array_sum * array_sum;
int individual_square_sum = 0 ;
for ( int i = 0 ; i < n; i++)
individual_square_sum += A[i] * A[i];
return (array_sum_square - individual_square_sum) / 2 ;
}
public static void main(String[] args)
{
int A[] = { 1 , 3 , 4 };
int n = A.length;
System.out.println( "sum of product of all pairs of array "
+ "elements : " + findProductSum(A, n));
}
}
|
Python3
def findProductSum(A, n):
array_sum = 0
for i in range ( 0 , n, 1 ):
array_sum = array_sum + A[i]
array_sum_square = array_sum * array_sum
individual_square_sum = 0
for i in range ( 0 , n, 1 ):
individual_square_sum + = A[i] * A[i]
return (array_sum_square -
individual_square_sum) / 2
if __name__ = = '__main__' :
A = [ 1 , 3 , 4 ]
n = len (A)
print ( "sum of product of all pairs of" ,
"array elements :" , int (findProductSum(A, n)))
|
C#
using System;
class GFG
{
static int findProductSum( int [] A, int n)
{
int array_sum = 0;
for ( int i = 0; i < n; i++)
array_sum = array_sum + A[i];
int array_sum_square = array_sum * array_sum;
int individual_square_sum = 0;
for ( int i = 0; i < n; i++)
individual_square_sum += A[i] * A[i];
return (array_sum_square -
individual_square_sum) / 2;
}
public static void Main()
{
int [] A = {1, 3, 4};
int n = A.Length;
Console.WriteLine( "sum of product of all " +
"pairs of array elements : " +
findProductSum(A, n));
}
}
|
PHP
<?php
function findProductSum(& $A , $n )
{
$array_sum = 0;
for ( $i = 0; $i < $n ; $i ++)
$array_sum = $array_sum + $A [ $i ];
$array_sum_square = $array_sum * $array_sum ;
$individual_square_sum = 0;
for ( $i = 0; $i < $n ; $i ++)
$individual_square_sum += $A [ $i ] * $A [ $i ];
return ( $array_sum_square -
$individual_square_sum ) / 2;
}
$A = array (1, 3, 4);
$n = sizeof( $A );
echo ( "sum of product of all pairs " .
"of array elements : " );
echo (findProductSum( $A , $n ));
?>
|
Javascript
<script>
function findProductSum(A, n)
{
let array_sum = 0;
for (let i = 0; i < n; i++)
array_sum = array_sum + A[i];
let array_sum_square = array_sum * array_sum;
let individual_square_sum = 0;
for (let i = 0; i < n; i++)
individual_square_sum += A[i] * A[i];
return (array_sum_square - individual_square_sum) / 2;
}
let A = [1, 3, 4];
let n = A.length;
document.write( "sum of product of all " +
"pairs of array elements : " +
findProductSum(A, n));
</script>
|
Output:
sum of product of all pairs of array elements : 19
Time Complexity : O(n)
Space Complexity : O(1)
This article is contributed by Pratik Chhajer. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.