# Almost Prime Numbers

A k-Almost Prime Number is a number having exactly k prime factors (not necessarily distinct).

For example,

2, 3, 5, 7, 11 ….(in fact all prime numbers) are 1-Almost Prime Numbers as they have only 1 prime factor (which is themselves).

4, 6, 9…. are 2-Almost Prime Numbers as they have exactly 2 prime factors (4 = 2*2, 6 = 2*3, 9 = 3*3)

Similarly, 32 is a 5-Almost Prime Number (32 = 2*2*2*2*2) and so is 72 (2*2*2*3*3)

All the 1-Almost Primes are called as Prime Numbers and all the 2-Almost Prime are called semi-primes.
The task is to print first n numbers that are k prime.
Examples:

```Input: k = 2, n = 5
Output: 4 6 9 10 14
4 has two prime factors, 2 x 2
6 has two prime factors, 2 x 3
Similarly, 9(3 x 3), 10(2 x 5) and 14(2 x 7)

Input: k = 10, n = 2
Output: 1024 1536
1024 and 1536 are first two numbers with 10
prime factors.
```

We iterate natural numbers and keep printing k-primes till the count of printed k-primes is less than or equal to n. To check if a number is k-prime, we find count of prime factors and if the count is k we consider the number as k-prime.
Below is the implementation of the above approach :

## C++

 `// Program to print first n numbers that are k-primes` `#include` `using` `namespace` `std;`   `// A function to count all prime factors of a given number` `int` `countPrimeFactors(``int` `n)` `{` `    ``int` `count = 0;`   `    ``// Count the number of 2s that divide n` `    ``while` `(n%2 == 0)` `    ``{` `        ``n = n/2;` `        ``count++;` `    ``}`   `    ``// n must be odd at this point. So we can skip one` `    ``// element (Note i = i +2)` `    ``for` `(``int` `i = 3; i <= ``sqrt``(n); i = i+2)` `    ``{` `        ``// While i divides n, count i and divide n` `        ``while` `(n%i == 0)` `        ``{` `            ``n = n/i;` `            ``count++;` `        ``}` `    ``}`   `    ``// This condition is to handle the case whien n is a` `    ``// prime number greater than 2` `    ``if` `(n > 2)` `        ``count++;`   `    ``return``(count);` `}`   `// A function to print the first n numbers that are` `// k-almost primes.` `void` `printKAlmostPrimes(``int` `k, ``int` `n)` `{` `    ``for` `(``int` `i=1, num=2; i<=n; num++)` `    ``{` `        ``// Print this number if it is k-prime` `        ``if` `(countPrimeFactors(num) == k)` `        ``{` `            ``printf``(``"%d "``, num);`   `            ``// Increment count of k-primes printed` `            ``// so far` `            ``i++;` `        ``}` `    ``}` `    ``return``;` `}`   `/* Driver program to test above function */` `int` `main()` `{` `    ``int` `n = 10, k = 2;` `    ``printf``(``"First %d %d-almost prime numbers : \n"``,` `           ``n, k);` `    ``printKAlmostPrimes(k, n);` `    ``return` `0;` `}`

## Java

 `// Program to print first n numbers that ` `// are k-primes`   `import` `java.io.*;`   `class` `GFG {` `    `  `    ``// A function to count all prime factors ` `    ``// of a given number` `    ``static` `int` `countPrimeFactors(``int` `n)` `    ``{`   `        ``int` `count = ``0``;`   `        ``// Count the number of 2s that divide n` `        ``while` `(n % ``2` `== ``0``) {`   `            ``n = n / ``2``;` `            ``count++;` `        ``}`   `        ``// n must be odd at this point. So we ` `        ``// can skip one element (Note i = i +2)` `        ``for` `(``int` `i = ``3``; i <= Math.sqrt(n); ` `                                  ``i = i + ``2``) {`   `            ``// While i divides n, count i and ` `            ``// divide n` `            ``while` `(n % i == ``0``) {`   `                ``n = n / i;` `                ``count++;` `            ``}` `        ``}`   `        ``// This condition is to handle the case ` `        ``// whien n is a prime number greater ` `        ``// than 2` `        ``if` `(n > ``2``)` `            ``count++;`   `        ``return` `(count);` `    ``}`   `    ``// A function to print the first n numbers ` `    ``// that are k-almost primes.` `    ``static` `void` `printKAlmostPrimes(``int` `k, ``int` `n)` `    ``{`   `        ``for` `(``int` `i = ``1``, num = ``2``; i <= n; num++) {` `            `  `            ``// Print this number if it is k-prime` `            ``if` `(countPrimeFactors(num) == k) {` `                `  `                ``System.out.print(num + ``" "``);`   `                ``// Increment count of k-primes` `                ``// printed so far` `                ``i++;` `            ``}` `        ``}`   `        ``return``;` `    ``}`   `    ``/* Driver program to test above function */` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `n = ``10``, k = ``2``;` `        ``System.out.println(``"First "` `+ n + ``" "` `             ``+ k + ``"-almost prime numbers : "``);`   `        ``printKAlmostPrimes(k, n);` `    ``}` `}`   `// This code is contributed by vt_m.`

## Python3

 `# Python3 Program to print first ` `# n numbers that are k-primes` `import` `math`   `# A function to count all prime` `# factors of a given number` `def` `countPrimeFactors(n):` `    ``count ``=` `0``;`   `    ``# Count the number of ` `    ``# 2s that divide n` `    ``while``(n ``%` `2` `=``=` `0``):` `        ``n ``=` `n ``/` `2``;` `        ``count ``+``=` `1``;`   `    ``# n must be odd at this point.` `    ``# So we can skip one` `    ``# element (Note i = i +2)` `    ``i ``=` `3``;` `    ``while``(i <``=` `math.sqrt(n)):` `        `  `        ``# While i divides n, ` `        ``# count i and divide n` `        ``while` `(n ``%` `i ``=``=` `0``):` `            ``n ``=` `n ``/` `i;` `            ``count ``+``=` `1``;` `        ``i ``=` `i ``+` `2``;`   `    ``# This condition is to handle` `    ``# the case whien n is a` `    ``# prime number greater than 2` `    ``if` `(n > ``2``):` `        ``count ``+``=` `1``;`   `    ``return``(count);`   `# A function to print the ` `# first n numbers that are` `# k-almost primes.` `def` `printKAlmostPrimes(k, n):` `    ``i ``=` `1``;` `    ``num ``=` `2` `    ``while``(i <``=` `n):` `        `  `        ``# Print this number if` `        ``# it is k-prime` `        ``if` `(countPrimeFactors(num) ``=``=` `k):` `            ``print``(num, end ``=` `"");` `            ``print``(``" "``, end ``=` `"");`   `            ``# Increment count of ` `            ``# k-primes printed` `            ``# so far` `            ``i ``+``=` `1``;` `        ``num ``+``=` `1``;` `    ``return``;`   `# Driver Code` `n ``=` `10``; ` `k ``=` `2``;` `print``(``"First n k-almost prime numbers:"``);` `printKAlmostPrimes(k, n);`   `# This code is contributed by mits`

## C#

 `// C# Program to print first n ` `// numbers that are k-primes ` `using` `System;`   `class` `GFG ` `{` `    `  `    ``// A function to count all prime  ` `    ``// factors of a given number` `    ``static` `int` `countPrimeFactors(``int` `n)` `    ``{` `        ``int` `count = 0;`   `        ``// Count the number of 2s that divide n` `        ``while` `(n % 2 == 0) ` `        ``{` `            ``n = n / 2;` `            ``count++;` `        ``}`   `        ``// n must be odd at this point. So we ` `        ``// can skip one element (Note i = i +2)` `        ``for` `(``int` `i = 3; i <= Math.Sqrt(n); ` `                                ``i = i + 2) ` `        ``{`   `            ``// While i divides n, count i and ` `            ``// divide n` `            ``while` `(n % i == 0) ` `            ``{` `                ``n = n / i;` `                ``count++;` `            ``}` `        ``}`   `        ``// This condition is to handle ` `        ``// the case when n is a prime` `        ``// number greater than 2 ` `        ``if` `(n > 2)` `            ``count++;`   `        ``return` `(count);` `    ``}`   `    ``// A function to print the first n` `    ``// numbers that are k-almost primes.` `    ``static` `void` `printKAlmostPrimes(``int` `k, ``int` `n)` `    ``{`   `        ``for` `(``int` `i = 1, num = 2; i <= n; num++) ` `        ``{` `            `  `            ``// Print this number if it is k-prime` `            ``if` `(countPrimeFactors(num) == k) ` `            ``{` `                   ``Console.Write(num + ``" "``);`   `                ``// Increment count of k-primes` `                ``// printed so far` `                ``i++;` `            ``}` `        ``}`   `        ``return``;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `n = 10, k = 2;` `        ``Console.WriteLine(``"First "` `+ n + ``" "` `            ``+ k + ``"-almost prime numbers : "``);`   `        ``printKAlmostPrimes(k, n);` `    ``}` `}`   `// This code is contributed by Nitin Mittal.`

## PHP

 ` 2)` `        ``\$count``++;`   `    ``return``(``\$count``);` `}`   `// A function to print the ` `// first n numbers that are` `// k-almost primes.` `function` `printKAlmostPrimes(``\$k``, ``\$n``)` `{` `    ``for` `(``\$i` `= 1, ``\$num` `= 2; ``\$i` `<= ``\$n``; ``\$num``++)` `    ``{` `        `  `        ``// Print this number if` `        ``// it is k-prime` `        ``if` `(countPrimeFactors(``\$num``) == ``\$k``)` `        ``{` `            ``echo``(``\$num``);` `            ``echo``(``" "``);`   `            ``// Increment count of ` `            ``// k-primes printed` `            ``// so far` `            ``\$i``++;` `        ``}` `    ``}` `    ``return``;` `}`   `    ``// Driver Code` `    ``\$n` `= 10; ` `    ``\$k` `= 2;` `    ``echo` `"First \$n \$k-almost prime numbers:\n"``;` `    ``printKAlmostPrimes(``\$k``, ``\$n``);`   `// This code is contributed by nitin mittal. ` `?>`

Output

```First 10 2-almost prime numbers :
4 6 9 10 14 15 21 22 25 26 ```

References:  https://en.wikipedia.org/wiki/Almost_prime

This article is contributed by Rachit Belwariar. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.