# Sum and Product of Prime Frequencies of Characters in a String

Given a string str containing only lowercase English alphabets, the task is to find the sum and product of all the prime frequencies of the characters in str.

Examples:

Input: str = “geeksforgeeks”
Output: 6, 8
Only characters ‘g’, ‘k’ and ‘s’ have prime frequencies i.e. 2 + 2 + 2 = 6 and 2 * 2* 2 = 8

Character frequency
g 2
e 4
k 2
s 2
f 1
o 1
r 1

Input: str = “algorithms”
Output: 0, 0

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

Approach:

• Traverse the string and store the frequencies of all the characters in a hash table.
• Find the frequencies which are prime using Sieve Of Eratosthenes.
• Calculate the sum and product of all of these prime frequencies and finally print the sum and product.

Below is the implementation of the above approach:

## C++

 `// C++ program to find Sum and product of Prime ` `// Frequencies of Characters in a String ` `#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 find the sum of prime frequencies ` `// of the characters of the given string ` `void` `sumProdOfPrimeFreq(string s) ` `{ ` `    ``bool` `prime[s.length() + 1]; ` `    ``memset``(prime, ``true``, ``sizeof``(prime)); ` ` `  `    ``SieveOfEratosthenes(prime, s.length() + 1); ` ` `  `    ``int` `i, j; ` ` `  `    ``// map is used to store ` `    ``// character frequencies ` `    ``unordered_map<``char``, ``int``> m; ` `    ``for` `(i = 0; i < s.length(); i++) ` `        ``m[s[i]]++; ` ` `  `    ``int` `sum = 0, product = 1; ` ` `  `    ``// Traverse the map ` `    ``for` `(``auto` `it = m.begin(); it != m.end(); it++) { ` ` `  `        ``// If the frequency is prime ` `        ``if` `(prime[it->second]) { ` `            ``sum += it->second; ` `            ``product *= it->second; ` `        ``} ` `    ``} ` ` `  `    ``cout << ``"Sum = "` `<< sum; ` `    ``cout << ``"\nProduct = "` `<< product; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string s = ``"geeksforgeeks"``; ` ` `  `    ``sumProdOfPrimeFreq(s); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find Sum and product of Prime ` `// Frequencies of Characters in a String ` `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 find the sum of prime frequencies ` `    ``// of the characters of the given string ` `    ``static` `void` `sumProdOfPrimeFreq(``char``[] s) ` `    ``{ ` `        ``boolean``[] prime = ``new` `boolean``[s.length + ``1``]; ` `        ``Arrays.fill(prime, ``true``); ` ` `  `        ``SieveOfEratosthenes(prime, s.length + ``1``); ` ` `  `        ``int` `i, j; ` ` `  `        ``// map is used to store ` `        ``// character frequencies ` `        ``Map mp = ``new` `HashMap<>(); ` `        ``for` `(i = ``0``; i < s.length; i++)  ` `        ``{ ` `            ``mp.put(s[i], mp.get(s[i]) == ``null` `? ``1` `: mp.get(s[i]) + ``1``); ` `        ``} ` ` `  `        ``int` `sum = ``0``, product = ``1``; ` ` `  `        ``// Traverse the map ` `        ``for` `(Map.Entry it : mp.entrySet())  ` `        ``{ ` ` `  `            ``// If the frequency is prime ` `            ``if` `(prime[it.getValue()]) ` `            ``{ ` `                ``sum += it.getValue(); ` `                ``product *= it.getValue(); ` `            ``} ` `        ``} ` ` `  `        ``System.out.print(``"Sum = "` `+ sum); ` `        ``System.out.println(``"\nProduct = "` `+ product); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String s = ``"geeksforgeeks"``; ` ` `  `        ``sumProdOfPrimeFreq(s.toCharArray()); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

## Python3

 `# Python3 program to find Sum and product of Prime ` `# Frequencies of Characters in a String ` ` `  `# 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``, 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 find the sum of prime frequencies ` `# of the characters of the given string ` `def` `sumProdOfPrimeFreq(s): ` `    ``prime ``=` `[``True``] ``*` `(``len``(s) ``+` `2``) ` ` `  `    ``SieveofEratosthenes(prime, ``len``(s) ``+` `1``) ` ` `  `    ``i ``=` `0` `    ``j ``=` `0` ` `  `    ``# map is used to store ` `    ``# character frequencies ` `    ``m ``=` `dict``() ` ` `  `    ``for` `i ``in` `range``(``len``(s)): ` `        ``m[s[i]] ``=` `(m[s[i]] ``+` `1``) ``if` `s[i] ``in` `m ``else` `1` ` `  `    ``s ``=` `0` `    ``product ``=` `1` ` `  `    ``# Traverse the map ` `    ``for` `it ``in` `m: ` ` `  `        ``# If the frequency is prime ` `        ``if` `prime[m[it]]: ` `            ``s ``+``=` `m[it] ` `            ``product ``*``=` `m[it] ` ` `  `    ``print``(``"Sum ="``, s) ` `    ``print``(``"Product ="``, product) ` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``s ``=` `"geeksforgeeks"` `    ``sumProdOfPrimeFreq(s) ` ` `  `# This code is contributed by ` `# sanjeev2552 `

## C#

 `// C# program to find Sum and product of Prime ` `// Frequencies of Characters in a String ` `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 find the sum of prime frequencies ` `    ``// of the characters of the given string ` `    ``static` `void` `sumProdOfPrimeFreq(``char``[] s) ` `    ``{ ` `        ``int` `i; ` `        ``bool``[] prime = ``new` `bool``[s.Length + 1]; ` `        ``for``(i=0;i mp = ``new` `Dictionary<``char``, ``int``>(); ` `        ``for` `(i = 0 ; i < s.Length; i++) ` `        ``{ ` `            ``if``(mp.ContainsKey(s[i])) ` `            ``{ ` `                ``var` `val = mp[s[i]]; ` `                ``mp.Remove(s[i]); ` `                ``mp.Add(s[i], val + 1);  ` `            ``} ` `            ``else` `            ``{ ` `                ``mp.Add(s[i], 1); ` `            ``} ` `        ``} ` ` `  `        ``int` `sum = 0, product = 1; ` ` `  `        ``// Traverse the map ` `        ``foreach``(KeyValuePair<``char``, ``int``> it ``in` `mp) ` `        ``{ ` ` `  `            ``// If the frequency is prime ` `            ``if` `(prime[it.Value]) ` `            ``{ ` `                ``sum += it.Value; ` `                ``product *= it.Value; ` `            ``} ` `        ``} ` ` `  `        ``Console.Write(``"Sum = "` `+ sum); ` `        ``Console.WriteLine(``"\nProduct = "` `+ product); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``String s = ``"geeksforgeeks"``; ` ` `  `        ``sumProdOfPrimeFreq(s.ToCharArray()); ` `    ``} ` `} ` ` `  `// This code is contributed by Princi Singh `

Output:

```Sum = 6
Product = 8
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.