Find Numbers with prime frequencies greater than or equal to k in C ++
We are given an array of positive integers and our task is to find the numbers which appear prime number of times and whose frequency is greater than or equal to a given number ‘k’.
Understand with example:
Let’s understand what we are going to do with example
Input: arr[] = {2,1,4,5,12,56,2,3,2,56,56,56,1,56,1} , k = 3
Output: 2 , 1 , 56
2 and 1 occur three times and 56 occurs five times.
Input: arr[] = {2,1,4,5,12,56,2,3,2,56,56,56,1,56,1} , k = 7
Output: -1 i.e no element occurs prime no. of times and frequency greater than or equal to 7.Approach:
- We will create a hash map and store numbers present in the array as key and their count as values in the map.
- Now we will traverse the map and check if the count of a particular key is prime and greater than or equal to ‘k’. If yes, then we will print that key.
Below is our C++ code to find numbers with prime frequencies greater than or equal to k:
#include<iostream>
#include<unordered_map>
using namespace std;
bool isPrime(int f)
{
if (f <= 1)
return false;
// Check if f is divisible by any number from 2 to f-1
for (int j = 2; j < f; j++)
if (f % j == 0)
return false;
return true;
}
// Function to print numbers with prime frequency and frequency
// greater than or equal to k
void frequencyPrime(int ar[], int k, int size)
{
unordered_map<int, int> freqMap;
// Insert keys and
// their counts
for (int j = 0; j < size; j++)
freqMap[ar[j]]++;
// Traverse freqMap and print element with prime frequency
// and frequency
// greater than or equal to k
for (auto element : freqMap)
{
if (isPrime(element.second) && element.second >= k)
cout << element.first << endl;
}
}
int main()
{
int ar[] = {2,1,4,5,12,56,2,3,2,56,56,56,1,56,1};
int k = 3;
int n = sizeof(ar)/sizeof(ar[0]);
frequencyPrime(ar, k, n);
return 0;
}Output:
Now it’s time to run the code.
After we run the code, we can see the output given below:
2 56 1
We hope you have got the solution.
Leave a Reply