Count subarrays with Prime sum
Given an array A[] of integers. The task is to count total subarrays whose sum is prime with ( size > 1 ).
Examples:
Input : A[] = { 1, 2, 3, 4, 5 }
Output : 3
Subarrays are -> {1, 2}, {2, 3}, {3, 4}
Input : A = { 22, 33, 4, 1, 10 };
Output : 4
Approach: Generate all possible subarrays and store their sum in a vector. Iterate the vector and check whether a sum is prime or not. It YES increments the count.
You can use sieve-of-eratosthenes to check whether a sum is prime in O(1).
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int primeSubarrays( int A[], int n)
{
int max_val = int ( pow (10, 7));
vector< bool > prime(max_val + 1, true );
prime[0] = false ;
prime[1] = false ;
for ( int p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= max_val; i += p)
prime[i] = false ;
}
}
int cnt = 0;
for ( int i = 0; i < n - 1; ++i) {
int val = A[i];
for ( int j = i + 1; j < n; ++j) {
val += A[j];
if (prime[val])
++cnt;
}
}
return cnt;
}
int main()
{
int A[] = { 1, 2, 3, 4, 5 };
int n = sizeof (A) / sizeof (A[0]);
cout << primeSubarrays(A, n);
return 0;
}
|
Java
class GFG
{
static int primeSubarrays( int [] A, int n)
{
int max_val = 10000000 ;
boolean [] prime = new boolean [max_val + 1 ];
for ( int p = 0 ; p < max_val + 1 ; p++)
prime[p]= true ;
prime[ 0 ]= false ;
prime[ 1 ]= false ;
for ( int p = 2 ; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( int i = p * 2 ; i <= max_val; i += p)
prime[i]= false ;
}
}
int cnt = 0 ;
for ( int i = 0 ; i < n - 1 ; ++i) {
int val = A[i];
for ( int j = i + 1 ; j < n; ++j) {
val += A[j];
if (prime[val])
++cnt;
}
}
return cnt;
}
public static void main(String[] args) {
int [] A = { 1 , 2 , 3 , 4 , 5 };
int n = A.length;
System.out.println(primeSubarrays(A, n));
}
}
|
Python3
def primeSubarrays(A, n):
max_val = 10 * * 7
prime = [ True ] * (max_val + 1 )
prime[ 0 ] = False
prime[ 1 ] = False
for p in range ( 2 , int (max_val * * ( 0.5 )) + 1 ):
if prime[p] = = True :
for i in range ( 2 * p, max_val + 1 , p):
prime[i] = False
cnt = 0
for i in range ( 0 , n - 1 ):
val = A[i]
for j in range (i + 1 , n):
val + = A[j]
if prime[val] = = True :
cnt + = 1
return cnt
if __name__ = = "__main__" :
A = [ 1 , 2 , 3 , 4 , 5 ]
n = len (A)
print (primeSubarrays(A, n))
|
C#
class Solution
{
static int primeSubarrays( int [] A, int n)
{
int max_val = ( int )(System.Math.Pow(10, 7));
bool [] prime= new bool [max_val + 1];
for ( int p = 0; p <max_val + 1; p++)
prime[p]= true ;
prime[0]= false ;
prime[1]= false ;
for ( int p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= max_val; i += p)
prime[i]= false ;
}
}
int cnt = 0;
for ( int i = 0; i < n - 1; ++i) {
int val = A[i];
for ( int j = i + 1; j < n; ++j) {
val += A[j];
if (prime[val])
++cnt;
}
}
return cnt;
}
static void Main()
{
int [] A = { 1, 2, 3, 4, 5 };
int n = A.Length;
System.Console.WriteLine( primeSubarrays(A, n));
}
}
|
PHP
<?php
function primeSubarrays( $A , $n )
{
$max_val = pow(10, 5);
$prime = array_fill (0, $max_val + 1,true);
$prime [0] = false;
$prime [1] = false;
for ( $p = 2; $p * $p <= $max_val ; $p ++) {
if ( $prime [ $p ] == true) {
for ( $i = $p * 2; $i <= $max_val ; $i += $p )
$prime [ $i ] = false;
}
}
$cnt = 0;
for ( $i = 0; $i < $n - 1; ++ $i ) {
$val = $A [ $i ];
for ( $j = $i + 1; $j < $n ; ++ $j ) {
$val += $A [ $j ];
if ( $prime [ $val ])
++ $cnt ;
}
}
return $cnt ;
}
$A = array ( 1, 2, 3, 4, 5 );
$n = count ( $A );
echo primeSubarrays( $A , $n );
?>
|
Javascript
<script>
function primeSubarrays(A, n)
{
var max_val = parseInt(Math.pow(10, 7));
var prime = new Array(max_val + 1);
prime.fill( true );
prime[0] = false ;
prime[1] = false ;
for ( var p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( var i = p * 2; i <= max_val; i += p)
prime[i] = false ;
}
}
var cnt = 0;
for ( var i = 0; i < n - 1; ++i) {
var val = A[i];
for ( var j = i + 1; j < n; ++j) {
val += A[j];
if (prime[val])
++cnt;
}
}
return cnt;
}
var A = [ 1, 2, 3, 4, 5 ];
var n =A.length;
document.write( primeSubarrays(A, n));
</script>
|
Complexity Analysis:
- Time Complexity: O(nlog(logn))
- Auxiliary Space: O(max_val)
Last Updated :
09 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...