Check if the sum of primes is divisible by any prime from the array
Last Updated :
12 Sep, 2022
Given an array arr[], the task is to check whether the sum of primes in the array is divisible by any of the primes in the array. If it is then print YES, otherwise print NO.
Examples:
Input: arr[] = {2, 3}
Output: NO
Primes: 2, 3
Sum = 2 + 3 = 5 which is neither divisible by 2 nor 3
Input: arr[] = {1, 2, 3, 4, 5}
Output: YES
2 + 3 + 5 = 10 is divisible by 2 as well as 5
Approach: The idea is to generate all primes upto maximum element from the array using Sieve of Eratosthenes.
- Traverse the array and check if the current element is prime or not. If it is prime then update sum = sum + arr[i].
- Traverse the array again and check if sum % arr[i] = 0 where arr[i] is prime. If it is then print YES. Otherwise print NO in the end.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void SumDivPrime( int A[], int n)
{
int max_val = *(std::max_element(A, A + n)) + 1;
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 sum = 0;
for ( int i = 0; i < n; ++i) {
if (prime[A[i]])
sum += A[i];
}
for ( int i = 0; i < n; ++i) {
if (prime[A[i]] && sum % A[i] == 0) {
cout << "YES" ;
return ;
}
}
cout << "NO" ;
}
int main()
{
int A[] = { 1, 2, 3, 4, 5 };
int n = sizeof (A) / sizeof (A[0]);
SumDivPrime(A, n);
return 0;
}
|
Java
class Solution
{
static int max_element( int A[])
{
int max=Integer.MIN_VALUE;
for ( int i= 0 ;i<A.length;i++)
if (max<A[i])
max=A[i];
return max;
}
static void SumDivPrime( int A[], int n)
{
int max_val = (max_element(A)) + 1 ;
boolean prime[]= new boolean [max_val+ 1 ];
for ( int i= 0 ;i<=max_val;i++)
prime[i]= 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 sum = 0 ;
for ( int i = 0 ; i < n; ++i) {
if (prime[A[i]])
sum += A[i];
}
for ( int i = 0 ; i < n; ++i) {
if (prime[A[i]] && sum % A[i] == 0 ) {
System.out.println( "YES" );
return ;
}
}
System.out.println( "NO" );
}
public static void main(String args[])
{
int A[] = { 1 , 2 , 3 , 4 , 5 };
int n = A.length;
SumDivPrime(A, n);
}
}
|
Python3
import math
def SumDivPrime(A, n):
max_val = max (A) + 1
prime = [ True ] * (max_val + 1 )
prime[ 0 ] = False
prime[ 1 ] = False
for p in range ( 2 , int (math.sqrt(max_val)) + 1 ):
if prime[p] = = True :
for i in range ( 2 * p, max_val + 1 , p):
prime[i] = False
sum = 0
for i in range ( 0 , n):
if prime[A[i]]:
sum + = A[i]
for i in range ( 0 , n):
if prime[A[i]] and sum % A[i] = = 0 :
print ( "YES" )
return
print ( "NO" )
A = [ 1 , 2 , 3 , 4 , 5 ]
n = len (A)
SumDivPrime(A, n)
|
C#
class GFG
{
static int max_element( int [] A)
{
int max = System.Int32.MinValue;
for ( int i = 0; i < A.Length; i++)
if (max < A[i])
max = A[i];
return max;
}
static void SumDivPrime( int [] A, int n)
{
int max_val = (max_element(A)) + 1;
bool [] prime= new bool [max_val+1];
for ( int i = 0; i <= max_val; i++)
prime[i] = 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 sum = 0;
for ( int i = 0; i < n; ++i)
{
if (prime[A[i]])
sum += A[i];
}
for ( int i = 0; i < n; ++i)
{
if (prime[A[i]] && sum % A[i] == 0)
{
System.Console.WriteLine( "YES" );
return ;
}
}
System.Console.WriteLine( "NO" );
}
public static void Main()
{
int []A = { 1, 2, 3, 4, 5 };
int n = A.Length;
SumDivPrime(A, n);
}
}
|
PHP
<?php
function SumDivPrime( $A , $n )
{
$max_val = max( $A );
$prime = array_fill (1, $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;
}
}
$sum = 0;
for ( $i = 0; $i < $n ; ++ $i )
{
if ( $prime [ $A [ $i ]])
$sum += $A [ $i ];
}
for ( $i = 0; $i < $n ; ++ $i )
{
if ( $prime [ $A [ $i ]] &&
$sum % $A [ $i ] == 0)
{
echo "YES" ;
return ;
}
}
echo "NO" ;
}
$A = array ( 1, 2, 3, 4, 5 );
$n = sizeof( $A ) ;
SumDivPrime( $A , $n );
?>
|
Javascript
<script>
function max_element(A)
{
var max = Number.MIN_VALUE;
for ( var i = 0; i < A.length; i++)
if (max < A[i])
max = A[i];
return max;
}
function SumDivPrime(A, n)
{
var max_val = (max_element(A)) + 1;
var prime = new Array(max_val + 1);
for ( var i = 0; i <= max_val; i++)
prime[i] = 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 sum = 0;
for ( var i = 0; i < n; ++i)
{
if (prime[A[i]])
sum += A[i];
}
for ( var i = 0; i < n; ++i)
{
if (prime[A[i]] && sum % A[i] == 0)
{
document.write( "YES" );
return ;
}
}
document.write( "NO" );
}
var A = [ 1, 2, 3, 4, 5 ];
var n = A.length;
SumDivPrime(A, n);
</script>
|
Complexity Analysis:
- Time Complexity: O(max_val*log(log(max_val))), where max_val is the largest element of the array.
- Auxiliary Space: O(max_val)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...