# Check if a number can be expressed as a product of exactly K prime divisors

Given an integer N, the task is to check if it can be expressed as a product of exactly K prime divisors.

Examples:

```Input: N = 12, K = 3
Output: Yes
Explanation:
12 can be expressed as product of 2×2×3.

Input: N = 14, K = 3
Output:  No
Explanation:
14 can be only expressed as product of 2×7.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

To solve the problem mentioned above we are given the value N and we will find the maximum number of values we can split N into. We can represent prime factorization of N as where pi are the prime factors of N and ai are the exponents. We know that total number of divisors of N is . Therefore, we can observe that we have to check whether it is possible to represent N as product of K numbers or not. If the maximum split is less than K then it is not possible to express it in exactly K prime divisors, else it is always possible.

## C++

 `// CPP implementation to Check if a ` `// number can be expressed as a ` `// product of exactly K prime divisors ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// function to find K prime divisors ` `void` `KPrimeDivisors(``int` `N, ``int` `K) ` `{ ` `    ``int` `maximum_split = 0; ` ` `  `    ``// count number of 2s that divide N ` `    ``while` `(N % 2 == 0) { ` `        ``maximum_split++; ` `        ``N /= 2; ` `    ``} ` ` `  `    ``// N must be odd at this point. ` `    ``// So we can skip one element ` `    ``for` `(``int` `i = 3; i * i <= N; i = i + 2) { ` ` `  `        ``while` `(N % i == 0) { ` `            ``// divide the value of N ` `            ``N = N / i; ` ` `  `            ``// increment count ` `            ``maximum_split++; ` `        ``} ` `    ``} ` ` `  `    ``// Condition to handle the case when n ` `    ``// is a prime number greater than 2 ` `    ``if` `(N > 2) ` `        ``maximum_split++; ` ` `  `    ``// check if maximum_split is less than K ` `    ``// then it not possible ` `    ``if` `(maximum_split < K) { ` `        ``printf``(``"No\n"``); ` `        ``return``; ` `    ``} ` ` `  `    ``printf``(``"Yes\n"``); ` `} ` ` `  `/* Driver code */` `int` `main() ` `{ ` `    ``// initialise N and K ` `    ``int` `N = 12; ` `    ``int` `K = 3; ` ` `  `    ``KPrimeDivisors(N, K); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation to Check if a  ` `// number can be expressed as a  ` `// product of exactly K prime divisors  ` `class` `GFG { ` `     `  `    ``// function to find K prime divisors  ` `    ``static` `void` `KPrimeDivisors(``int` `N, ``int` `K)  ` `    ``{  ` `        ``int` `maximum_split = ``0``;  ` `     `  `        ``// count number of 2s that divide N  ` `        ``while` `(N % ``2` `== ``0``) {  ` `            ``maximum_split++;  ` `            ``N /= ``2``;  ` `        ``}  ` `     `  `        ``// N must be odd at this point.  ` `        ``// So we can skip one element  ` `        ``for` `(``int` `i = ``3``; i * i <= N; i = i + ``2``) {  ` `     `  `            ``while` `(N % i == ``0``) {  ` `                ``// divide the value of N  ` `                ``N = N / i;  ` `     `  `                ``// increment count  ` `                ``maximum_split++;  ` `            ``}  ` `        ``}  ` `     `  `        ``// Condition to handle the case when n  ` `        ``// is a prime number greater than 2  ` `        ``if` `(N > ``2``)  ` `            ``maximum_split++;  ` `     `  `        ``// check if maximum_split is less than K  ` `        ``// then it not possible  ` `        ``if` `(maximum_split < K) {  ` `            ``System.out.println(``"No"``);  ` `            ``return``;  ` `        ``}  ` `     `  `        ``System.out.println(``"Yes"``);  ` `    ``}  ` `     `  `    ``/* Driver code */` `    ``public` `static` `void` `main (String[] args) ` `    ``{  ` `        ``// initialise N and K  ` `        ``int` `N = ``12``;  ` `        ``int` `K = ``3``;  ` `     `  `        ``KPrimeDivisors(N, K);  ` `    ``}  ` `} ` ` `  `// This code is contributed by Yash_R `

## Python3

 `# Python implementation to Check if a ` `# number can be expressed as a ` `# product of exactly K prime divisors ` ` `  `import` `math as mt  ` ` `  `# function to find K prime divisors ` `def` `KPrimeDivisors(n, k):  ` `     `  `    ``# To count maximum split of N ` `    ``maximum_split ``=` `0` `     `  `    ``# count number of 2s that divide N ` `    ``while` `n ``%` `2` `=``=` `0``:  ` `        ``maximum_split``+``=` `1` `        ``n ``=` `n ``/``/` `2` `         `  `    ``# n must be odd at this point  ` `    ``# so we skip one element  ` `    ``for` `i ``in` `range``(``3``, mt.ceil(mt.sqrt(n)), ``2``):  ` `        ``while` `n ``%` `i ``=``=` `0``:  ` `            ``n ``=` `n ``/` `i;  ` `            ``maximum_split``+``=` `1` `             `  `    ``# Condition to handle the case when n ` `    ``# is a prime number greater than 2  ` `    ``if` `n > ``2``:  ` `        ``maximum_split``+``=` `1` `         `  `    ``# check if maximum_split is less than K ` `    ``# then it not possible ` `    ``if` `maximum_split < k:  ` `        ``print``(``"No"``) ` `        ``return` ` `  `    ``print``(``"Yes"``) ` `         `  `     `  ` `  `# Driver code  ` `N ``=` `12` `K ``=` `3` `KPrimeDivisors(N, K) `

## C#

 `     `  `// C# implementation to Check if a  ` `// number can be expressed as a  ` `// product of exactly K prime divisors  ` `using` `System; ` ` `  `class` `GFG { ` `      `  `    ``// function to find K prime divisors  ` `    ``static` `void` `KPrimeDivisors(``int` `N, ``int` `K)  ` `    ``{  ` `        ``int` `maximum_split = 0;  ` `      `  `        ``// count number of 2s that divide N  ` `        ``while` `(N % 2 == 0) {  ` `            ``maximum_split++;  ` `            ``N /= 2;  ` `        ``}  ` `      `  `        ``// N must be odd at this point.  ` `        ``// So we can skip one element  ` `        ``for` `(``int` `i = 3; i * i <= N; i = i + 2) {  ` `      `  `            ``while` `(N % i == 0) {  ` ` `  `                ``// divide the value of N  ` `                ``N = N / i;  ` `      `  `                ``// increment count  ` `                ``maximum_split++;  ` `            ``}  ` `        ``}  ` `      `  `        ``// Condition to handle the case when n  ` `        ``// is a prime number greater than 2  ` `        ``if` `(N > 2)  ` `            ``maximum_split++;  ` `      `  `        ``// check if maximum_split is less than K  ` `        ``// then it not possible  ` `        ``if` `(maximum_split < K) {  ` `            ``Console.WriteLine(``"No"``);  ` `            ``return``;  ` `        ``}  ` `      `  `        ``Console.WriteLine(``"Yes"``);  ` `    ``}  ` `      `  `    ``/* Driver code */` `    ``public` `static` `void` `Main(String[] args) ` `    ``{  ` `        ``// initialise N and K  ` `        ``int` `N = 12;  ` `        ``int` `K = 3;  ` `      `  `        ``KPrimeDivisors(N, K);  ` `    ``}  ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```Yes
```

Time Complexity: O(sqrt(N))

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : Yash_R, 29AjayKumar