Related Articles
Sum of elements in an array having prime frequency
• Last Updated : 01 Jul, 2019

Given an array arr, the task is to find the sum of the elements which have prime frequencies in the array.
Note: 1 is neither prime nor composite.

Examples:

Input: arr[] = {5, 4, 6, 5, 4, 6}
Output: 15
All the elements appear 2 times which is a prime
So, 5 + 4 + 6 = 15

Input: arr[] = {1, 2, 3, 3, 2, 3, 2, 3, 3}
Output: 5
Only 2 and 3 appears prime number of times i.e. 3 and 5 respectively.
So, 2 + 3 = 5

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Traverse the array and store the frequencies of all the elements in a map.
• Build Sieve of Eratosthenes which will be used to test the primality of a number in O(1) time.
• Calculate the sum of elements having prime frequency using the Sieve array calculated in the previous step.

Below is the implementation of the above approach:

## C++

 `// C++ program to find sum of elements``// in an array having prime frequency``#include ``using` `namespace` `std;`` ` `// Function to create Sieve to check primes``void` `SieveOfEratosthenes(``bool` `prime[], ``int` `p_size)``{``    ``// False here indicates``    ``// that it is not prime``    ``prime = ``false``;``    ``prime = ``false``;`` ` `    ``for` `(``int` `p = 2; p * p <= p_size; p++) {`` ` `        ``// If prime[p] is not changed,``        ``// then it is a prime``        ``if` `(prime[p]) {`` ` `            ``// Update all multiples of p,``            ``// set them to non-prime``            ``for` `(``int` `i = p * 2; i <= p_size; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}``}`` ` `// Function to return the sum of elements``// in an array having prime frequency``int` `sumOfElements(``int` `arr[], ``int` `n)``{``    ``bool` `prime[n + 1];``    ``memset``(prime, ``true``, ``sizeof``(prime));`` ` `    ``SieveOfEratosthenes(prime, n + 1);`` ` `    ``int` `i, j;`` ` `    ``// Map is used to store``    ``// element frequencies``    ``unordered_map<``int``, ``int``> m;``    ``for` `(i = 0; i < n; i++)``        ``m[arr[i]]++;`` ` `    ``int` `sum = 0;`` ` `    ``// Traverse the map using iterators``    ``for` `(``auto` `it = m.begin(); it != m.end(); it++) {`` ` `        ``// Count the number of elements``        ``// having prime frequencies``        ``if` `(prime[it->second]) {``            ``sum += (it->first);``        ``}``    ``}`` ` `    ``return` `sum;``}`` ` `// Driver code``int` `main()``{``    ``int` `arr[] = { 5, 4, 6, 5, 4, 6 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);`` ` `    ``cout << sumOfElements(arr, n);``    ``return` `0;``}`

## Java

 `// Java program to find sum of elements``// in an array having prime frequency``import` `java.util.*;`` ` `class` `GFG ``{`` ` `    ``// Function to create Sieve to check primes``    ``static` `void` `SieveOfEratosthenes(``boolean` `prime[], ``int` `p_size)``    ``{``        ``// False here indicates``        ``// that it is not prime``        ``prime[``0``] = ``false``;``        ``prime[``1``] = ``false``;``     ` `        ``for` `(``int` `p = ``2``; p * p <= p_size; p++)``        ``{``     ` `            ``// If prime[p] is not changed,``            ``// then it is a prime``            ``if` `(prime[p]) ``            ``{``     ` `                ``// Update all multiples of p,``                ``// set them to non-prime``                ``for` `(``int` `i = p * ``2``; i <= p_size; i += p)``                    ``prime[i] = ``false``;``            ``}``        ``}``    ``}``     ` `    ``// Function to return the sum of elements``    ``// in an array having prime frequency``    ``static` `int` `sumOfElements(``int` `arr[], ``int` `n)``    ``{``        ``boolean` `prime[] = ``new` `boolean``[n + ``1``];``        ``Arrays.fill(prime, ``true``);``     ` `        ``SieveOfEratosthenes(prime, n + ``1``);``     ` `        ``int` `i, j;``     ` `        ``// Map is used to store``        ``// element frequencies``        ``HashMap m = ``new` `HashMap<>();``        ``for` `(i = ``0``; i < n; i++) ``        ``{``            ``if``(m.containsKey(arr[i]))``                ``m.put(arr[i], m.get(arr[i]) + ``1``);``            ``else``                ``m.put(arr[i], ``1``);``        ``}``     ` `        ``int` `sum = ``0``;``     ` `        ``// Traverse the map``        ``for` `(Map.Entry entry : m.entrySet()) ``        ``{``            ``int` `key = entry.getKey();``            ``int` `value = entry.getValue();``             ` `            ``// Count the number of elements``            ``// having prime frequencies``            ``if` `(prime[value]) ``            ``{``                ``sum += (key);``            ``}``        ``}``     ` `        ``return` `sum;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `arr[] = { ``5``, ``4``, ``6``, ``5``, ``4``, ``6` `};``        ``int` `n = arr.length;``     ` `        ``System.out.println(sumOfElements(arr, n));``    ``}``}`` ` `// This code is contributed by ghanshyampandey`

## Python3

 `# Python3 program to find Sum of elements``# in an array having prime frequency``import` `math as mt`` ` `# Function to create Sieve to``# check primes``def` `SieveOfEratosthenes(prime, p_size):``     ` `    ``# False here indicates``    ``# that it is not prime``    ``prime[``0``] ``=` `False``    ``prime[``1``] ``=` `False`` ` `    ``for` `p ``in` `range``(``2``, mt.ceil(mt.sqrt(p_size ``+` `1``))):`` ` `        ``# If prime[p] is not changed,``        ``# then it is a prime``        ``if` `(prime[p]):`` ` `            ``# Update all multiples of p,``            ``# set them to non-prime``            ``for` `i ``in` `range``(p ``*` `2``, p_size ``+` `1``, p):``                ``prime[i] ``=` `False``         ` `# Function to return the Sum of elements``# in an array having prime frequency``def` `SumOfElements(arr, n):``    ``prime ``=` `[``True` `for` `i ``in` `range``(n ``+` `1``)]``    ``SieveOfEratosthenes(prime, n ``+` `1``)`` ` `    ``i, j ``=` `0``, ``0`` ` `    ``# Map is used to store``    ``# element frequencies``    ``m ``=` `dict``()``    ``for` `i ``in` `range``(n):``        ``if` `arr[i] ``in` `m.keys():``            ``m[arr[i]] ``+``=` `1``        ``else``:``            ``m[arr[i]] ``=` `1``             ` `    ``Sum` `=` `0`` ` `    ``# Traverse the map using iterators``    ``for` `i ``in` `m:``         ` `        ``# Count the number of elements``        ``# having prime frequencies``        ``if` `(prime[m[i]]):``            ``Sum` `+``=` `(i)``     ` `    ``return` `Sum`` ` `# Driver code``arr ``=` `[``5``, ``4``, ``6``, ``5``, ``4``, ``6` `]``n ``=` `len``(arr)``print``(SumOfElements(arr, n))`` ` `# This code is contributed``# by Mohit kumar 29`

## C#

 `// C# program to find sum of elements``// in an array having prime frequency``using` `System;``using` `System.Collections.Generic;`` ` `class` `GFG ``{`` ` `    ``// Function to create Sieve to check primes``    ``static` `void` `SieveOfEratosthenes(``bool` `[]prime, ``int` `p_size)``    ``{``        ``// False here indicates``        ``// that it is not prime``        ``prime = ``false``;``        ``prime = ``false``;``     ` `        ``for` `(``int` `p = 2; p * p <= p_size; p++)``        ``{``     ` `            ``// If prime[p] is not changed,``            ``// then it is a prime``            ``if` `(prime[p]) ``            ``{``     ` `                ``// Update all multiples of p,``                ``// set them to non-prime``                ``for` `(``int` `i = p * 2; i <= p_size; i += p)``                    ``prime[i] = ``false``;``            ``}``        ``}``    ``}``     ` `    ``// Function to return the sum of elements``    ``// in an array having prime frequency``    ``static` `int` `sumOfElements(``int` `[]arr, ``int` `n)``    ``{``        ``bool` `[]prime = ``new` `bool``[n + 1];``        ``for``(``int` `i = 0; i < n+1; i++)``            ``prime[i] = ``true``;``     ` `        ``SieveOfEratosthenes(prime, n + 1);`` ` `     ` `        ``// Map is used to store``        ``// element frequencies``        ``Dictionary<``int``,``int``> m = ``new` `Dictionary<``int``,``int``>();``        ``for` `(``int` `i = 0 ; i < n; i++)``        ``{``            ``if``(m.ContainsKey(arr[i]))``            ``{``                ``var` `val = m[arr[i]];``                ``m.Remove(arr[i]);``                ``m.Add(arr[i], val + 1); ``            ``}``            ``else``            ``{``                ``m.Add(arr[i], 1);``            ``}``        ``}``     ` `        ``int` `sum = 0;``     ` `        ``// Traverse the map``        ``foreach``(KeyValuePair<``int``, ``int``> entry ``in` `m)``        ``{``            ``int` `key = entry.Key;``            ``int` `value = entry.Value;``             ` `            ``// Count the number of elements``            ``// having prime frequencies``            ``if` `(prime[value]) ``            ``{``                ``sum += (key);``            ``}``        ``}``     ` `        ``return` `sum;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `Main(String []args)``    ``{``        ``int` `[]arr = { 5, 4, 6, 5, 4, 6 };``        ``int` `n = arr.Length;``     ` `        ``Console.WriteLine(sumOfElements(arr, n));``    ``}``}`` ` `// This code is contributed by 29AjayKumar`
Output:
```15
```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up