# Print all numbers whose set of prime factors is a subset of the set of the prime factors of X

Given a number X and an array of N numbers. The task is to print all the numbers in the array whose set of prime factors is a subset of the set of the prime factors of X.

Examples:

Input: X = 60, a[] = {2, 5, 10, 7, 17}
Output: 2 5 10
Set of prime factors of 60: {2, 3, 5}

Set of prime factors of 2: {2}
Set of prime factors of 5: {5}
Set of prime factors of 10: {2, 5}
Set of prime factors of 7: {7}
Set of prime factors of 17: {17}
Hence only 2, 5 and 10’s set of prime factors is a subset of set of prime
factors of 60.

Input: X = 15, a[] = {2, 8}
Output: There are no such numbers

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

Approach: Iterate for every element in the array, and keep dividing the number by the gcd of the number and X till gcd becomes 1 for the number and X. If at the end the number becomes 1 after continuous division, then print that number.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement ` `// the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to print all the numbers ` `void` `printNumbers(``int` `a[], ``int` `n, ``int` `x) ` `{ ` ` `  `    ``bool` `flag = ``false``; ` ` `  `    ``// Iterate for every element in the array ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``int` `num = a[i]; ` ` `  `        ``// Find the gcd ` `        ``int` `g = __gcd(num, x); ` ` `  `        ``// Iterate till gcd is 1 ` `        ``// of number and x ` `        ``while` `(g != 1) { ` ` `  `            ``// Divide the number by gcd ` `            ``num /= g; ` ` `  `            ``// Find the new gcdg ` `            ``g = __gcd(num, x); ` `        ``} ` ` `  `        ``// If the number is 1 at the end ` `        ``// then print the number ` `        ``if` `(num == 1) { ` `            ``flag = ``true``; ` `            ``cout << a[i] << ``" "``; ` `        ``} ` `    ``} ` ` `  `    ``// If no numbers have been there ` `    ``if` `(!flag) ` `        ``cout << ``"There are no such numbers"``; ` `} ` ` `  `// Drivers code ` `int` `main() ` `{ ` `    ``int` `x = 60; ` `    ``int` `a[] = { 2, 5, 10, 7, 17 }; ` `    ``int` `n = ``sizeof``(a) / ``sizeof``(a); ` ` `  `    ``printNumbers(a, n, x); ` `    ``return` `0; ` `} `

## Java

 `// Java program to implement ` `// the above approach ` `class` `GFG ` `{ ` ` `  `// Function to print all the numbers ` `static` `void` `printNumbers(``int` `a[], ``int` `n, ``int` `x) ` `{ ` ` `  `    ``boolean` `flag = ``false``; ` ` `  `    ``// Iterate for every element in the array ` `    ``for` `(``int` `i = ``0``; i < n; i++)  ` `    ``{ ` ` `  `        ``int` `num = a[i]; ` ` `  `        ``// Find the gcd ` `        ``int` `g = __gcd(num, x); ` ` `  `        ``// Iterate till gcd is 1 ` `        ``// of number and x ` `        ``while` `(g != ``1``) ` `        ``{ ` ` `  `            ``// Divide the number by gcd ` `            ``num /= g; ` ` `  `            ``// Find the new gcdg ` `            ``g = __gcd(num, x); ` `        ``} ` ` `  `        ``// If the number is 1 at the end ` `        ``// then print the number ` `        ``if` `(num == ``1``)  ` `        ``{ ` `            ``flag = ``true``; ` `            ``System.out.print(a[i] + ``" "``); ` `        ``} ` `    ``} ` ` `  `    ``// If no numbers have been there ` `    ``if` `(!flag) ` `        ``System.out.println(``"There are no such numbers"``); ` `} ` ` `  `static` `int` `__gcd(``int` `a, ``int` `b)  ` `{  ` `    ``if` `(b == ``0``)  ` `        ``return` `a;  ` `    ``return` `__gcd(b, a % b);  ` `     `  `} ` ` `  `// Drivers code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `x = ``60``; ` `    ``int` `a[] = { ``2``, ``5``, ``10``, ``7``, ``17` `}; ` `    ``int` `n = a.length; ` ` `  `    ``printNumbers(a, n, x); ` `} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

## Python3

 `# Python3 program to implement  ` `# the above approach  ` `from` `math ``import` `gcd ` ` `  `# Function to print all the numbers  ` `def` `printNumbers(a, n, x) :  ` ` `  `    ``flag ``=` `False` ` `  `    ``# Iterate for every element in the array  ` `    ``for` `i ``in` `range``(n) : ` ` `  `        ``num ``=` `a[i] ` ` `  `        ``# Find the gcd  ` `        ``g ``=` `gcd(num, x) ` ` `  `        ``# Iterate till gcd is 1  ` `        ``# of number and x  ` `        ``while` `(g !``=` `1``) :  ` ` `  `            ``# Divide the number by gcd  ` `            ``num ``/``/``=` `g ` ` `  `            ``# Find the new gcdg  ` `            ``g ``=` `gcd(num, x) ` ` `  `        ``# If the number is 1 at the end  ` `        ``# then print the number  ` `        ``if` `(num ``=``=` `1``) : ` `            ``flag ``=` `True``;  ` `            ``print``(a[i], end ``=` `" "``); ` ` `  `    ``# If no numbers have been there  ` `    ``if` `(``not` `flag) : ` `        ``print``(``"There are no such numbers"``)  ` ` `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``x ``=` `60` `    ``a ``=` `[ ``2``, ``5``, ``10``, ``7``, ``17` `] ` `    ``n ``=` `len``(a)  ` ` `  `    ``printNumbers(a, n, x) ` `     `  `# This code is contributed by Ryuga `

## C#

 `// C# program to implement ` `// the above approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to print all the numbers ` `static` `void` `printNumbers(``int` `[]a, ``int` `n, ``int` `x) ` `{ ` ` `  `    ``bool` `flag = ``false``; ` ` `  `    ``// Iterate for every element in the array ` `    ``for` `(``int` `i = 0; i < n; i++)  ` `    ``{ ` ` `  `        ``int` `num = a[i]; ` ` `  `        ``// Find the gcd ` `        ``int` `g = __gcd(num, x); ` ` `  `        ``// Iterate till gcd is 1 ` `        ``// of number and x ` `        ``while` `(g != 1) ` `        ``{ ` ` `  `            ``// Divide the number by gcd ` `            ``num /= g; ` ` `  `            ``// Find the new gcdg ` `            ``g = __gcd(num, x); ` `        ``} ` ` `  `        ``// If the number is 1 at the end ` `        ``// then print the number ` `        ``if` `(num == 1)  ` `        ``{ ` `            ``flag = ``true``; ` `            ``Console.Write(a[i] + ``" "``); ` `        ``} ` `    ``} ` ` `  `    ``// If no numbers have been there ` `    ``if` `(!flag) ` `        ``Console.WriteLine(``"There are no such numbers"``); ` `} ` ` `  `static` `int` `__gcd(``int` `a, ``int` `b)  ` `{  ` `    ``if` `(b == 0)  ` `        ``return` `a;  ` `    ``return` `__gcd(b, a % b);  ` `     `  `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `x = 60; ` `    ``int` `[]a = { 2, 5, 10, 7, 17 }; ` `    ``int` `n = a.Length; ` ` `  `    ``printNumbers(a, n, x); ` `} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

## PHP

 ` `

Output:

```2 5 10
```

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.

My Personal Notes arrow_drop_up Striver(underscore)79 at Codechef and codeforces D

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.