Open In App

Array elements with prime frequencies

Last Updated : 03 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a string. The task is to find the count of characters whose number of occurrences is prime. 

Examples

Input : str = "geeksforgeeks"
Output : 3
Count of occurrences of characters are:
g -> 2
e -> 4
k -> 2
s -> 2
f -> 1
o -> 1
r -> 1
So, g, k and s occurs prime number of times i.e. 2

Input : str = "aabbcc"
Output : 3

Start traversing the string and count the occurrences of each character using a map in C++ and check whether an occurrence is prime or not. If prime then increment the count otherwise not.

Algorithm:

  •  Create a static function named “check_prime” with a boolean return type that takes an integer as the input value.
  • that will return true or false if the number is prime or not.
  •  Create a static function named countPrimeFreuent with in return type which takes a string as input.
  • initialize an int variable count with a value of 0
  •  To store the frequency of each character in the string s, create a hashmap called mp.
    • start for loop inside function which traverses the input string and updates its frequency in mp
    • now iterate the map and characters with prime occurrences, If the frequency is prime, increment the count variable
  • return the value of the count

Below is the implementation of the above approach: 

C++




// C++ program to find count of numbers
// with prime frequencies
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a
// number is prime
bool check_prime(int n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// Function to find count of numbers
// with prime frequencies
int countPrimeFrequent(string s)
{
    int count = 0;
 
    // create a map to store
    // frequency of each character
    unordered_map<char, int> mp;
 
    // Store frequency of each character
    // in the map
    for (int i = 0; i < s.length(); i++)
        mp[s[i]]++;
 
    // now iterate the map and characters
    // with prime occurrences
    for (auto it = mp.begin(); it != mp.end(); it++) {
 
        // if prime then increment count
        if (check_prime(it->second))
            count++;
    }
 
    return count;
}
 
// Driver Code
int main()
{
    string s = "geeksforgeeks";
 
    cout << countPrimeFrequent(s);
 
    return 0;
}


Java




// Java program to find count of numbers
// with prime frequencies
 
import java.util.*;
 
class GFG
{
 
    // Function to check if a
    // number is prime
    static boolean check_prime(int n)
    {
        // Corner cases
        if (n <= 1)
        {
            return false;
        }
        if (n <= 3)
        {
            return true;
        }
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
        {
            return false;
        }
 
        for (int i = 5; i * i <= n; i = i + 6)
        {
            if (n % i == 0 || n % (i + 2) == 0)
            {
                return false;
            }
        }
 
        return true;
    }
 
    // Function to find count of numbers
    // with prime frequencies
    static int countPrimeFrequent(String s)
    {
        int count = 0;
 
        // create a map to store
        // frequency of each character
        Map<Character, Integer> mp = new HashMap<>();
 
        // Store frequency of each character
        // in the map
        for (int i = 0; i < s.length(); i++)
        {
            if (mp.containsKey(s.charAt(i)))
            {
                mp.put(s.charAt(i), mp.get(s.charAt(i)) + 1);
            }
            else
            {
                mp.put(s.charAt(i), 1);
            }
        }
 
        // now iterate the map and characters
        // with prime occurrences
        for (Map.Entry<Character, Integer> entry : mp.entrySet())
        {
 
            // if prime then increment count
            if (check_prime(entry.getValue()))
            {
                count++;
            }
        }
 
        return count;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        String s = "geeksforgeeks";
 
        System.out.println(countPrimeFrequent(s));
    }
}
 
// This code has been contributed by 29AjayKumar


Python3




# python3 program to find count of numbers
# with prime frequencies
 
# Function to check if a
# number is prime
 
def check_prime(n):
    # Corner cases
    if (n <= 1):
        return False
    if (n <= 3):
        return True
   
     # This is checked so that we can skip
     # middle five numbers in below loop
    if (n % 2 == 0 or n % 3 == 0):
        return False
   
    for i in range(5,n+1,6):
        if (n % i == 0 or n % (i + 2) == 0):
            return False
    return True
 
 
# Function to find count of numbers
# with prime frequencies
def countPrimeFrequent(s):
    count = 0
    # create a map to store
    # frequency of each character
    mp={}
   
    # Store frequency of each character
    # in the mp
    for i in range(0,len(s)):
        mp.setdefault(s[i],0)
        mp[s[i]]+=1
     
    # now iterate the map and characters
    # with prime occurrences
    for i in mp.keys():
        # if prime then increment count
        if (check_prime(mp[i])):
            count+=1
    return count;
 
# Driver Code
s = "geeksforgeeks"
print(countPrimeFrequent(s))
# This code is improved by sahilshelangia


C#




// C# program to find count of numbers
// with prime frequencies
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to check if a
    // number is prime
    static Boolean check_prime(int n)
    {
        // Corner cases
        if (n <= 1)
        {
            return false;
        }
        if (n <= 3)
        {
            return true;
        }
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
        {
            return false;
        }
 
        for (int i = 5; i * i <= n; i = i + 6)
        {
            if (n % i == 0 || n % (i + 2) == 0)
            {
                return false;
            }
        }
 
        return true;
    }
 
    // Function to find count of numbers
    // with prime frequencies
    static int countPrimeFrequent(String s)
    {
        int count = 0;
 
        // create a map to store
        // frequency of each character
        Dictionary<char, int> mp = new Dictionary<char,int>();
 
        // Store frequency of each character
        // in the map
        for (int i = 0; i < s.Length; i++)
        {
            if (mp.ContainsKey(s[i]))
            {
                var v = mp[s[i]] + 1;
                mp.Remove(s[i]);
                mp.Add(s[i], v);
            }
            else
            {
                mp.Add(s[i], 1);
            }
        }
 
        // now iterate the map and characters
        // with prime occurrences
        foreach(KeyValuePair<char, int> entry in mp)
        {
            // if prime then increment count
            if (check_prime(entry.Value))
            {
                count++;        
            }
        }
        return count;
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        String s = "geeksforgeeks";
 
        Console.WriteLine(countPrimeFrequent(s));
    }
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
// Javascript program to find count of numbers
// with prime frequencies
 
 
// Function to check if a
// number is prime
function check_prime(n) {
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (let i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// Function to find count of numbers
// with prime frequencies
function countPrimeFrequent(s) {
    let count = 0;
 
    // create a map to store
    // frequency of each character
    let mp = new Map();
 
    // Store frequency of each character
    // in the map
    for (let i = 0; i < s.length; i++) {
        if (mp.has(s[i])) {
            mp.set(s[i], mp.get(s[i]) + 1);
        }
        else {
            mp.set(s[i], 1);
        }
    }
 
    // now iterate the map and characters
    // with prime occurrences
    for (let it of mp) {
 
        // if prime then increment count
        if (check_prime(it[1]))
            count++;
    }
 
    return count;
}
 
// Driver Code
 
let s = "geeksforgeeks";
 
document.write(countPrimeFrequent(s));
 
// This code is contributed by Saurabh Jaiswal
</script>


Output

3

Time Complexity: O(n + n * sqrt(n)). where n is the length of the string.
Auxiliary Space: O(m). where m is the number of unique characters in the input string.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads