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

Last Updated : 09 Sep, 2022

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

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

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[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` `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[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)` `    ``{` `        ``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`

## Javascript

 ``

Output

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

Complexity Analysis:

• Time Complexity: O(N*log(logN)), where N is the length of the given string.
• Auxiliary Space: O(N), since N extra space has been taken.