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:

C++

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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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<Character, Integer> 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<Character, Integer> 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

chevron_right


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#

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
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<s.Length + 1;i++){
            prime[i]=true;
        }
  
        SieveOfEratosthenes(prime, s.Length + 1);
  
          
  
        // map is used to store
        // character frequencies
        Dictionary<char, int> 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

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.