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



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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find Sum and product of Prime
// Frequencies of Characters in a String
#include <bits/stdc++.h>
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;
}

chevron_right


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.