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

• Difficulty Level : Hard
• Last Updated : 13 Apr, 2021

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++

 `// CPP program to find sum of``// non-primes in given array``#include ``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;``}`

## Java

 `// Java program to find sum of``// non-primes in given array``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`

## Python3

 `# Python3 program to find sum of non-primes``# in given array` `# 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`

## C#

 `// C# program to find sum of non-primes``// in given array``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.`

## PHP

 ``

## Javascript

 ``
Output:
`22`

My Personal Notes arrow_drop_up