Related Articles

# Sum of product of all elements of sub-arrays of size k

• Difficulty Level : Easy
• Last Updated : 05 Jul, 2021

Given an array and a number k, the task is to calculate the sum of the product of all elements of subarrays of size k.
Examples :

```Input : arr[] = {1, 2, 3, 4, 5, 6}
k = 3
Output : 210
Consider all subarrays of size k
1*2*3 = 6
2*3*4 = 24
3*4*5 = 60
4*5*6 = 120
6 + 24 + 60 + 120 = 210

Input : arr[] = {1, -2, 3, -4, 5, 6}
k = 2
Output : -10
Consider all subarrays of size k
1*-2 = -2
-2*3 = -6
3*-4 = -12
-4*5 = -20
5*6  =   30
-2 + -6 + -12 + -20+ 30 = -10```

A Naive approach is to generate all subarrays of size k and do the sum of product of all elements of subarrays.

## C++

 `// C++ program to find the sum of``// product of all subarrays``#include ``using` `namespace` `std;` `// Function to calculate the sum of product``int` `calcSOP(``int` `arr[], ``int` `n, ``int` `k)``{``    ``// Initialize sum = 0``    ``int` `sum = 0;` `    ``// Consider every subarray of size k``    ``for` `(``int` `i = 0; i <= n - k; i++) {``        ``int` `prod = 1;` `        ``// Calculate product of all elements``        ``// of current subarray``        ``for` `(``int` `j = i; j < k + i; j++)``            ``prod *= arr[j];` `        ``// Store sum of all the products``        ``sum += prod;``    ``}` `    ``// Return sum``    ``return` `sum;``}` `// Driver code``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5, 6 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``int` `k = 3;` `    ``cout << calcSOP(arr, n, k);` `    ``return` `0;``}`

## Java

 `// Java program to find the sum of``// product of all subarrays` `class` `GFG {``    ``// Method to calculate the sum of product``    ``static` `int` `calcSOP(``int` `arr[], ``int` `n, ``int` `k)``    ``{``        ``// Initialize sum = 0``        ``int` `sum = ``0``;` `        ``// Consider every subarray of size k``        ``for` `(``int` `i = ``0``; i <= n - k; i++) {``            ``int` `prod = ``1``;` `            ``// Calculate product of all elements``            ``// of current subarray``            ``for` `(``int` `j = i; j < k + i; j++)``                ``prod *= arr[j];` `            ``// Store sum of all the products``            ``sum += prod;``        ``}` `        ``// Return sum``        ``return` `sum;``    ``}` `    ``// Driver method``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `};``        ``int` `k = ``3``;` `        ``System.out.println(calcSOP(arr, arr.length, k));``    ``}``}`

## Python3

 `# python program to find the sum of``# product of all subarrays` `# Function to calculate the sum of product``def` `calcSOP(arr, n, k):``    ` `    ``# Initialize sum = 0``    ``sum` `=` `0` `    ``# Consider every subarray of size k``    ``for` `i ``in` `range``(``0``, (n``-``k)``+``1``):``        ``prod ``=` `1``        ` `        ``# Calculate product of all elements``        ``# of current subarray``        ``for` `j ``in` `range``(i, k``+``i):``            ``prod ``=` `int``(prod ``*` `arr[j])` `        ``# Store sum of all the products``        ``sum` `=` `sum` `+` `prod``    ` `    ``# Return sum``    ``return` `sum` `#Driver code``arr ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `]``n ``=` `len``(arr)``k ``=` `3``print``(calcSOP(arr, n, k))` `# This code is contributed by Sam007`

## C#

 `// C# program to find the sum of``// product of all subarrays``using` `System;` `public` `class` `GFG {``    ` `    ``// Method to calculate the sum of product``    ``static` `int` `calcSOP(``int``[] arr, ``int` `n, ``int` `k)``    ``{``        ``// Initialize sum = 0``        ``int` `sum = 0;` `        ``// Consider every subarray of size k``        ``for` `(``int` `i = 0; i <= n - k; i++) {``            ``int` `prod = 1;` `            ``// Calculate product of all elements``            ``// of current subarray``            ``for` `(``int` `j = i; j < k + i; j++)``                ``prod *= arr[j];` `            ``// Store sum of all the products``            ``sum += prod;``        ``}` `        ``// Return sum``        ``return` `sum;``    ``}` `    ``// Driver method``    ``public` `static` `void` `Main()``    ``{``        ``int``[] arr = {1, 2, 3, 4, 5, 6};``        ``int` `k = 3;` `        ``Console.WriteLine(calcSOP(arr, arr.Length, k));``    ``}``}` `// This code is contributed by Sam007`

PHP

``````
<?php
// PHP program to find the sum of
// product of all subarrays

// Function to calculate
// the sum of product
function calcSOP(\$arr, \$n, \$k)
{

// Initialize sum = 0
\$sum = 0;

// Consider every subarray
// of size k
for (\$i = 0; \$i <= \$n - \$k; \$i++)
{
\$prod = 1;

// Calculate product of all
// elements of current subarray
for (\$j = \$i; \$j < \$k + \$i; \$j++)
\$prod *= \$arr[\$j];

// Store sum of all
// the products
\$sum += \$prod;
}

// Return sum
return \$sum;
}

// Driver code
\$arr = array( 1, 2, 3, 4, 5, 6 );
\$n = count(\$arr);
\$k = 3;

echo calcSOP(\$arr, \$n, \$k);

// This code is contributed by Sam007
?>

``````

## Javascript

 ``

Output:

`210`

Time Complexity: O(nk)
An Efficient Method is to use the concept of Sliding Window.
1- Consider first subarray/window of size k, do the product of elements and add to the total_sum.

``` for (i=0; i < k; i++)
prod = prod * arr[i];```

2- Now, By Using sliding window concept, remove first element of window from the product and add next element to the window. i.e.

```for (i =k ; i < n; i++)
{
// Removing first element from product
prod = prod / arr[i-k];

//  Adding current element to the product
prod = prod * arr[i];
sum += prod;
}```

3- Return sum

C/C++

` `

## Java

 `// Java program to find the sum of``// product of all subarrays` `class` `GFG {``    ``// Method to calculate the sum of product``    ``static` `int` `calcSOP(``int` `arr[], ``int` `n, ``int` `k)``    ``{``        ``// Initialize sum = 0 and prod = 1``        ``int` `sum = ``0``, prod = ``1``;` `        ``// Consider first subarray of size k``        ``// Store the products of elements``        ``for` `(``int` `i = ``0``; i < k; i++)``            ``prod *= arr[i];` `        ``// Add the product to the sum``        ``sum += prod;` `        ``// Consider every subarray of size k``        ``// Remove first element and add current``        ``// element to the window``        ``for` `(``int` `i = k; i < n; i++) {` `            ``// Divide by the first element``            ``// of previous subarray/ window``            ``// and product with the current element``            ``prod = (prod / arr[i - k]) * arr[i];` `            ``// Add current product to the sum``            ``sum += prod;``        ``}` `        ``// Return sum``        ``return` `sum;``    ``}` `    ``// Driver method``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5``, ``6` `};``        ``int` `k = ``3``;` `        ``System.out.println(calcSOP(arr, arr.length, k));``    ``}``}`

## Python3

 `# Python3 program to find the sum of``# product of all subarrays` `# Function to calculate the sum of product``def` `calcSOP(arr, n, k):``    ` `    ``# Initialize sum = 0 and prod = 1``    ``sum` `=` `0``    ``prod ``=` `1` `    ``# Consider first subarray of size k``    ``# Store the products of elements``    ``for` `i ``in` `range``(k):``        ``prod ``*``=` `arr[i]` `    ``# Add the product to the sum``    ``sum` `+``=` `prod` `    ``# Consider every subarray of size k``    ``# Remove first element and add current``    ``# element to the window``    ``for` `i ``in` `range``(k, n, ``1``):``        ` `        ``# Divide by the first element of``        ``#  previous subarray/ window and``        ``# product with the current element``        ``prod ``=` `(prod ``/` `arr[i ``-` `k]) ``*` `arr[i]` `        ``# Add current product to the sum``        ``sum` `+``=` `prod` `    ``# Return sum``    ``return` `int``(``sum``)` `# Drivers code``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``, ``6``]``n ``=` `len``(arr)``k ``=` `3` `print``(calcSOP(arr, n, k))` `# This code is contributed 29AjayKumar`

## C#

 `// C# program to find the sum of``// product of all subarrays``using` `System;` `public` `class` `GFG {``    ` `    ``// Method to calculate the sum of product``    ``static` `int` `calcSOP(``int``[] arr, ``int` `n, ``int` `k)``    ``{``        ``// Initialize sum = 0 and prod = 1``        ``int` `sum = 0, prod = 1;` `        ``// Consider first subarray of size k``        ``// Store the products of elements``        ``for` `(``int` `i = 0; i < k; i++)``            ``prod *= arr[i];` `        ``// Add the product to the sum``        ``sum += prod;` `        ``// Consider every subarray of size k``        ``// Remove first element and add current``        ``// element to the window``        ``for` `(``int` `i = k; i < n; i++) {` `            ``// Divide by the first element``            ``// of previous subarray/ window``            ``// and product with the current element``            ``prod = (prod / arr[i - k]) * arr[i];` `            ``// Add current product to the sum``            ``sum += prod;``        ``}` `        ``// Return sum``        ``return` `sum;``    ``}` `    ``// Driver method``    ``public` `static` `void` `Main()``    ``{``        ``int``[] arr = { 1, 2, 3, 4, 5, 6 };``        ``int` `k = 3;``        ` `        ``// Function calling``        ``Console.WriteLine(calcSOP(arr, arr.Length, k));``    ``}``}` `// This code is contributed by Sam007`

## PHP

 ``

## Javascript

 ``

Output:

`210`

Time Complexity: O(n)
This article is contributed by Sahil Chhabra. 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.