# Count the number of primes in the prefix sum array of the given array

• Last Updated : 31 May, 2022

Given an array arr[] of N integers, the task is to count the number of primes in the prefix sum array of the given array.
Examples:

Input: arr[] = {1, 4, 8, 4}
Output:
The prefix sum array is {1, 5, 13, 17}
and the three primes are 5, 13 and 17.
Input: arr[] = {1, 5, 2, 3, 7, 9}
Output:

Approach: Create the prefix sum array and then use Sieve of Eratosthenes to count the number of primes in the prefix sum array.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the count of primes``// in the given array``int` `primeCount(``int` `arr[], ``int` `n)``{``    ``// Find maximum value in the array``    ``int` `max_val = *max_element(arr, arr + n);` `    ``// USE SIEVE TO FIND ALL PRIME NUMBERS LESS``    ``// THAN OR EQUAL TO max_val``    ``// Create a boolean array "prime[0..n]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``vector<``bool``> prime(max_val + 1, ``true``);` `    ``// Remaining part of SIEVE``    ``prime[0] = ``false``;``    ``prime[1] = ``false``;``    ``for` `(``int` `p = 2; p * p <= max_val; p++) {` `        ``// If prime[p] is not changed, then``        ``// it is a prime``        ``if` `(prime[p] == ``true``) {` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * 2; i <= max_val; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``// Find all primes in arr[]``    ``int` `count = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(prime[arr[i]])``            ``count++;` `    ``return` `count;``}` `// Function to generate the prefix array``void` `getPrefixArray(``int` `arr[], ``int` `n, ``int` `pre[])``{` `    ``// Fill the prefix array``    ``pre[0] = arr[0];``    ``for` `(``int` `i = 1; i < n; i++) {``        ``pre[i] = pre[i - 1] + arr[i];``    ``}``}` `// Driver code``int` `main()``{` `    ``int` `arr[] = { 1, 4, 8, 4 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``// Prefix array of arr[]``    ``int` `pre[n];``    ``getPrefixArray(arr, n, pre);` `    ``// Count of primes in the prefix array``    ``cout << primeCount(pre, n);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.util.*;` `class` `GFG``{``    ` `//returns the max element``static` `int` `max_element(``int` `a[])``{``    ``int` `m = a[``0``];``    ``for``(``int` `i = ``0``; i < a.length; i++)``        ``m = Math.max(a[i], m);``    ` `    ``return` `m;``}` `// Function to return the count of primes``// in the given array``static` `int` `primeCount(``int` `arr[], ``int` `n)``{``    ``// Find maximum value in the array``    ``int` `max_val = max_element(arr);` `    ``// USE SIEVE TO FIND ALL PRIME NUMBERS LESS``    ``// THAN OR EQUAL TO max_val``    ``// Create a boolean array "prime[0..n]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``boolean` `prime[] = ``new` `boolean``[max_val + ``1``];``    ``for` `(``int` `p = ``0``; p <= max_val; p++)``        ``prime[p] = ``true``;` `    ``// Remaining part of SIEVE``    ``prime[``0``] = ``false``;``    ``prime[``1``] = ``false``;``    ``for` `(``int` `p = ``2``; p * p <= max_val; p++)``    ``{` `        ``// If prime[p] is not changed, then``        ``// it is a prime``        ``if` `(prime[p] == ``true``)``        ``{` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * ``2``; i <= max_val; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``// Find all primes in arr[]``    ``int` `count = ``0``;``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``if` `(prime[arr[i]])``            ``count++;` `    ``return` `count;``}` `// Function to generate the prefix array``static` `int``[] getPrefixArray(``int` `arr[], ``int` `n, ``int` `pre[])``{` `    ``// Fill the prefix array``    ``pre[``0``] = arr[``0``];``    ``for` `(``int` `i = ``1``; i < n; i++)``    ``{``        ``pre[i] = pre[i - ``1``] + arr[i];``    ``}``    ``return` `pre;``}` `// Driver code``public` `static` `void` `main(String args[])``{` `    ``int` `arr[] = { ``1``, ``4``, ``8``, ``4` `};``    ``int` `n = arr.length;` `    ``// Prefix array of arr[]``    ``int` `pre[]=``new` `int``[n];``    ``pre=getPrefixArray(arr, n, pre);` `    ``// Count of primes in the prefix array``    ``System.out.println(primeCount(pre, n));` `}``}` `// This code is contributed by Arnab Kundu`

## Python3

 `# Python3 implementation of the approach` `# Function to return the count``# of primes in the given array``def` `primeCount(arr, n):`` ` `    ``# Find maximum value in the array``    ``max_val ``=` `max``(arr)` `    ``# USE SIEVE TO FIND ALL PRIME NUMBERS LESS``    ``# THAN OR EQUAL TO max_val``    ``# Create a boolean array "prime[0..n]". A``    ``# value in prime[i] will finally be False``    ``# if i is Not a prime, else True.``    ``prime ``=` `[``True``] ``*` `(max_val``+``1``)` `    ``# Remaining part of SIEVE``    ``prime[``0``] ``=` `prime[``1``] ``=` `False``    ``p ``=` `2``    ``while` `p ``*` `p <``=` `max_val: ` `        ``# If prime[p] is not changed,``        ``# then it is a prime``        ``if` `prime[p] ``=``=` `True``: ` `            ``# Update all multiples of p``            ``for` `i ``in` `range``(p ``*` `2``, max_val``+``1``, p):``                ``prime[i] ``=` `False``                ` `        ``p ``+``=` `1``         ` `    ``# Find all primes in arr[]``    ``count ``=` `0``    ``for` `i ``in` `range``(``0``, n):``        ``if` `prime[arr[i]]:``            ``count ``+``=` `1` `    ``return` `count`` ` `# Function to generate the prefix array``def` `getPrefixArray(arr, n, pre):`` ` `    ``# Fill the prefix array``    ``pre[``0``] ``=` `arr[``0``]``    ``for` `i ``in` `range``(``1``, n): ``        ``pre[i] ``=` `pre[i ``-` `1``] ``+` `arr[i]` `# Driver code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``arr ``=` `[``1``, ``4``, ``8``, ``4``] ``    ``n ``=` `len``(arr)` `    ``# Prefix array of arr[]``    ``pre ``=` `[``None``] ``*` `n``    ``getPrefixArray(arr, n, pre)` `    ``# Count of primes in the prefix array``    ``print``(primeCount(pre, n))` `# This code is contributed by Rituraj Jain`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ` `// returns the max element``static` `int` `max_element(``int``[] a)``{``    ``int` `m = a[0];``    ``for``(``int` `i = 0; i < a.Length; i++)``        ``m = Math.Max(a[i], m);``    ` `    ``return` `m;``}` `// Function to return the count of primes``// in the given array``static` `int` `primeCount(``int``[] arr, ``int` `n)``{``    ``// Find maximum value in the array``    ``int` `max_val = max_element(arr);` `    ``// USE SIEVE TO FIND ALL PRIME NUMBERS LESS``    ``// THAN OR EQUAL TO max_val``    ``// Create a bool array "prime[0..n]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``bool``[] prime = ``new` `bool``[max_val + 1];``    ``for` `(``int` `p = 0; p <= max_val; p++)``        ``prime[p] = ``true``;` `    ``// Remaining part of SIEVE``    ``prime[0] = ``false``;``    ``prime[1] = ``false``;``    ``for` `(``int` `p = 2; p * p <= max_val; p++)``    ``{` `        ``// If prime[p] is not changed, then``        ``// it is a prime``        ``if` `(prime[p] == ``true``)``        ``{` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * 2; i <= max_val; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``// Find all primes in arr[]``    ``int` `count = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(prime[arr[i]])``            ``count++;` `    ``return` `count;``}` `// Function to generate the prefix array``static` `int``[] getPrefixArray(``int``[] arr, ``int` `n, ``int``[] pre)``{` `    ``// Fill the prefix array``    ``pre[0] = arr[0];``    ``for` `(``int` `i = 1; i < n; i++)``    ``{``        ``pre[i] = pre[i - 1] + arr[i];``    ``}``    ``return` `pre;``}` `// Driver code``public` `static` `void` `Main()``{` `    ``int``[] arr = { 1, 4, 8, 4 };``    ``int` `n = arr.Length;` `    ``// Prefix array of arr[]``    ``int``[] pre = ``new` `int``[n];``    ``pre = getPrefixArray(arr, n, pre);` `    ``// Count of primes in the prefix array``    ``Console.Write(primeCount(pre, n));` `}``}` `// This code is contributed by ChitraNayal`

## PHP

 ``

## Javascript

 ``

Output:

`3`

Time Complexity: O(n + sqrt(max(arr))), where max(arr) is the largest element of the array arr.

Auxiliary Space: O(n + max(arr))

My Personal Notes arrow_drop_up