Given two integers X and K, the task is to determine whether there exists a number that has exactly X factors out of which K is prime.
Examples:
Input: X = 8, K = 1
Output: Yes
Explanation:
The number is 128
Factors of 128 = {1, 2, 4, 8, 16, 32, 64, 128} which are 8 in count = X
Among these, only 2 is prime. Therefore count of prime factor = 1 = KInput: X = 4, K = 2
Output: Yes
Explanation:
The number is 6
Factors of 6 = {1, 2, 3, 6} which are 4 in count = X
Among these, only 2 and 3 are prime. Therefore count of prime factor = 2 = K
Approach:
- Suppose a number N has X factors out of which K are prime, say
- Thus, number can be written as
where, the total number of factors is calculated by
- It is observed that X is a product of “power+1” of the prime factors of the number. Thus, if we are able to divide X into a product of K numbers, then we can form a number with exactly X factors out of which K is prime.
Below is the implementation of the above approach:
C++
// C++ program to check if there exists // a number with X factors // out of which exactly K are prime #include <bits/stdc++.h> using namespace std; // Function to check if such number exists bool check( int X, int K) { int prime, temp, sqr, i; // To store the sum of powers // of prime factors of X which // determines the maximum count // of numbers whose product can form X prime = 0; temp = X; sqr = sqrt (X); // Determining the prime factors of X for (i = 2; i <= sqr; i++) { while (temp % i == 0) { temp = temp / i; prime++; } } // To check if the number is prime if (temp > 2) prime++; // If X is 1, then we cannot form // a number with 1 factor and K // prime factor (as K is atleast 1) if (X == 1) return false ; // If X itself is prime then it // can be represented as a power // of only 1 prime factor which // is X itself so we return true if (prime == 1 && K == 1) return true ; // If sum of the powers of prime factors // of X is greater than or equal to K, // which means X can be represented as a // product of K numbers, we return true else if (prime >= K) return true ; // In any other case, we return false // as we cannot form a number with X // factors and K prime factors else return false ; } // Driver code int main() { int X, K; X = 4; K = 2; if (check(X, K)) cout << "Yes" ; else cout << "No" ; } |
Java
// Java program to check if there exists // a number with X factors // out of which exactly K are prime import java.util.*; class GFG{ // Function to check if such number exists static boolean check( int X, int K) { int prime, temp, sqr, i; // To store the sum of powers // of prime factors of X which // determines the maximum count // of numbers whose product can form X prime = 0 ; temp = X; sqr = ( int ) Math.sqrt(X); // Determining the prime factors of X for (i = 2 ; i <= sqr; i++) { while (temp % i == 0 ) { temp = temp / i; prime++; } } // To check if the number is prime if (temp > 2 ) prime++; // If X is 1, then we cannot form // a number with 1 factor and K // prime factor (as K is atleast 1) if (X == 1 ) return false ; // If X itself is prime then it // can be represented as a power // of only 1 prime factor which // is X itself so we return true if (prime == 1 && K == 1 ) return true ; // If sum of the powers of prime factors // of X is greater than or equal to K, // which means X can be represented as a // product of K numbers, we return true else if (prime >= K) return true ; // In any other case, we return false // as we cannot form a number with X // factors and K prime factors else return false ; } // Driver code public static void main(String[] args) { int X, K; X = 4 ; K = 2 ; if (check(X, K)) System.out.print( "Yes" ); else System.out.print( "No" ); } } // This code contributed by Rajput-Ji |
Python3
# Python3 program to check if there exists # a number with X factors # out of which exactly K are prime from math import sqrt # Function to check if such number exists def check(X,K): # To store the sum of powers # of prime factors of X which # determines the maximum count # of numbers whose product can form X prime = 0 temp = X sqr = int (sqrt(X)) # Determining the prime factors of X for i in range ( 2 ,sqr + 1 , 1 ): while (temp % i = = 0 ): temp = temp / / i prime + = 1 # To check if the number is prime if (temp > 2 ): prime + = 1 # If X is 1, then we cannot form # a number with 1 factor and K # prime factor (as K is atleast 1) if (X = = 1 ): return False # If X itself is prime then it # can be represented as a power # of only 1 prime factor w0hich # is X itself so we return true if (prime = = 1 and K = = 1 ): return True # If sum of the powers of prime factors # of X is greater than or equal to K, # which means X can be represented as a # product of K numbers, we return true elif (prime > = K): return True # In any other case, we return false # as we cannot form a number with X # factors and K prime factors else : return False # Driver code if __name__ = = '__main__' : X = 4 K = 2 if (check(X, K)): print ( "Yes" ) else : print ( "No" ) # This code is contributed by Surendra_Gangwar |
C#
// C# program to check if there exists // a number with X factors // out of which exactly K are prime using System; class GFG{ // Function to check if such number exists static bool check( int X, int K) { int prime, temp, sqr, i; // To store the sum of powers // of prime factors of X which // determines the maximum count // of numbers whose product can form X prime = 0; temp = X; sqr = Convert.ToInt32(Math.Sqrt(X)); // Determining the prime factors of X for (i = 2; i <= sqr; i++) { while (temp % i == 0) { temp = temp / i; prime++; } } // To check if the number is prime if (temp > 2) prime++; // If X is 1, then we cannot form // a number with 1 factor and K // prime factor (as K is atleast 1) if (X == 1) return false ; // If X itself is prime then it // can be represented as a power // of only 1 prime factor which // is X itself so we return true if (prime == 1 && K == 1) return true ; // If sum of the powers of prime factors // of X is greater than or equal to K, // which means X can be represented as a // product of K numbers, we return true else if (prime >= K) return true ; // In any other case, we return false // as we cannot form a number with X // factors and K prime factors else return false ; } // Driver code static public void Main () { int X, K; X = 4; K = 2; if (check(X, K)) Console.WriteLine( "Yes" ); else Console.WriteLine( "No" ); } } // This code is contributed by shubhamsingh10 |
Yes
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.