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 = “neveropen”
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++
// 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 = "neveropen" ; 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<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 = "neveropen" ; 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 = "neveropen" 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<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 = "neveropen" ; sumProdOfPrimeFreq(s.ToCharArray()); } } // This code is contributed by Princi Singh |
Javascript
<script> // Javascript program to find Sum and product of Prime // Frequencies of Characters in a String // Function to create Sieve to check primes function SieveOfEratosthenes(prime, p_size) { // false here indicates // that it is not prime prime[0] = false ; prime[1] = false ; for (let 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 (let 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 function sumProdOfPrimeFreq(s) { let prime = new Array(s.length + 1); prime.fill( true ); SieveOfEratosthenes(prime, s.length + 1); let i, j; // map is used to store // character frequencies let m = new Map(); for (i = 0; i < s.length; i++) m.set(s[i], m.get(s[i]) == null ? 1 : m.get(s[i]) + 1); let sum = 0, product = 1; // Traverse the map for (let it of m) { console.log(m) // If the frequency is prime if (prime[it[1]]) { sum += it[1]; product *= it[1]; } } document.write( "Sum = " + sum); document.write( "<br>Product = " + product); } // Driver code let s = "neveropen" ; sumProdOfPrimeFreq(s); // This code is contributed by gfgking </script> |
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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!