Open In App

Array elements with prime frequencies

Last Updated : 03 Mar, 2023
Comments
Improve
Suggest changes
Like Article
Like
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.


Next Article

Similar Reads