Find the sum of non-prime elements in the given array

Given an array arr[] and the task is to print the sum of the non-prime elements from the array.

Examples:

Input: arr[] = {1, 3, 7, 4, 9, 8}
Output: 22
Non-prime elements are {1, 4, 9, 8} and 1 + 4 + 9 + 8 = 22

Input: arr[] = {11, 4, 10, 7}
Output: 14

Approach: Initialize sum = 0 and start traversing the array element by element, if current element is not a prime then update sum = sum + arr[i]. Print the sum in the end. Primality can be optimally tested using Sieve of Eratosthenes.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find sum of
// non-primes in given arary
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the sum of
// non-prime elements from the array
int nonPrimeSum(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;
        }
    }
  
    // Sum all non-prime elements in arr[]
    int sum = 0;
    for (int i = 0; i < n; i++)
        if (!prime[arr[i]])
            sum += arr[i];
  
    return sum;
}
  
// Driver code
int main()
{
  
    int arr[] = { 1, 3, 7, 4, 9, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    cout << nonPrimeSum(arr, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find sum of
// non-primes in given arary
import java.util.*;
  
class GFG
{
  
//returns the maximum element
static int max_element(int arr[])
{
    int max_e = Integer.MIN_VALUE;
    for(int i = 0; i < arr.length; i++)
    {
    max_e = Math.max(max_e, arr[i]); 
    }
    return max_e;
}
  
// Function to return the sum of
// non-prime elements from the array
static int nonPrimeSum(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 i = 0; i < prime.length; i++)
    prime[i] = 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;
        }
    }
  
    // Sum all non-prime elements in arr[]
    int sum = 0;
    for (int i = 0; i < n; i++)
        if (!prime[arr[i]])
            sum += arr[i];
  
    return sum;
}
  
// Driver code
public static void main(String args[])
{
  
    int arr[] = { 1, 3, 7, 4, 9, 8 };
    int n = arr.length;
    System.out.println( nonPrimeSum(arr, n));
}
}
  
// This code is contributed by Arnab Kundu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find sum of non-primes 
# in given arary 
  
# from math lib. import sqrt
from math import sqrt
  
# Function to return the sum of 
# non-prime elements from the array 
def nonPrimeSum(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] = False
    prime[1] = False
      
    for p in range(2, int(sqrt(max_val)) + 1) :
  
        # 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
          
    # Sum all non-prime elements in arr[] 
    sum = 0
    for i in range(0, n) : 
        if (not prime[arr[i]]) :
            sum += arr[i]
  
    return sum
  
# Driver code 
if __name__ == "__main__" :
  
    arr= [ 1, 3, 7, 4, 9, 8
    n = len(arr) 
  
    print(nonPrimeSum(arr, n))
  
# This code is contributed by Ryuga

chevron_right


C#

// C# program to find sum of non-primes
// in given arary
using System;

class GFG
{

// returns the maximum element
static int max_element(int[] arr)
{
int max_e = int.MinValue;
for(int i = 0; i < arr.Length; i++) { max_e = Math.Max(max_e, arr[i]); } return max_e; } // Function to return the sum of // non-prime elements from the array static int nonPrimeSum(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. bool[] prime = new bool[max_val + 1]; for(int i = 0; i < prime.Length; i++) prime[i] = 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; } } // Sum all non-prime elements in arr[] int sum = 0; for (int i = 0; i < n; i++) if (!prime[arr[i]]) sum += arr[i]; return sum; } // Driver code public static void Main() { int[] arr = { 1, 3, 7, 4, 9, 8 }; int n = arr.Length; Console.WriteLine(nonPrimeSum(arr, n)); } } // This code is contributed // by Mukul Singh. [tabbyending]

Output:

22


My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.