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

• Last Updated : 11 Jul, 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 = ``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`

## Javascript

 ``

Output:

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

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.

My Personal Notes arrow_drop_up