# Check if a number is divisible by all prime divisors of another number

Given two integers. We need to find if the first number x is divisible by all prime divisors of y.

Examples :

```Input  : x = 120, y = 75
Output : Yes
Explanation :
120 = (2^3)*3*5
75  = 3*(5^2)
120 is divisible by both 3 and 5 which
are the prime divisors of 75. Hence,

Input  :  x = 15, y = 6
Output : No
Explanation :
15 = 3*5.
6 = 2*3,
15 is not divisible by 2 which is a
prime divisor of 6. Hence, answer
is "No".
```

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

A simple solution is to find all prime factors of y. For every prime factor, check if it divides x or not.

An efficient solution is based on below facts.
1) if y == 1, then it no prime divisors. Hence answer is “Yes”
2) We find GCD of x and y.
a) If GCD == 1, then clearly there are no common divisors of x and y, hence answer is “No”.
b) If GCD > 1, the GCD contains prime divisors which divide x also. Now, we have all unique prime divisor if and only if y/GCD has such unique prime divisor. So we have to find uniqueness for pair (x, y/GCD) using recursion.

## C++

 `// CPP program to find if all prime factors ` `// of y divide x. ` `#include ` `using` `namespace` `std; ` ` `  `// Returns true if all prime factors of y  ` `// divide x. ` `bool` `isDivisible(``int` `x, ``int` `y) ` `{ ` `    ``if` `(y == 1) ` `        ``return` `true``; ` ` `  `    ``if` `(__gcd(x, y) == 1) ` `        ``return` `false``; ` `    ``return` `isDivisible(x, y / gcd); ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `x = 18, y = 12; ` `    ``if` `(isDivisible(x, y)) ` `        ``cout << ``"Yes"` `<< endl; ` `    ``else` `        ``cout << ``"No"` `<< endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find if all  ` `// prime factors of y divide x. ` `class` `Divisible  ` `{ ` `    ``public` `static` `int` `gcd(``int` `a, ``int` `b) {  ` `      ``return` `b == ``0` `? a : gcd(b, a % b); } ` `     `  `    ``// Returns true if all prime factors ` `    ``// of y divide x. ` `    ``static` `boolean` `isDivisible(``int` `x, ``int` `y) ` `    ``{ ` `        ``if` `(y == ``1``) ` `            ``return` `true``; ` `             `  `        ``int` `z = gcd(x, y); ` `     `  `        ``if` `(z == ``1``) ` `            ``return` `false``; ` `     `  `        ``return` `isDivisible(x, y / z); ` `    ``} ` ` `  `    ``// Driver program to test above functions ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``int` `x = ``18``, y = ``12``; ` `        ``if` `(isDivisible(x, y)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` `// This code is contributed by Prerna Saini `

## Python3

 `# python program to find if all ` `# prime factors of y divide x. ` ` `  `def` `gcd(a, b): ` `    ``if``(b ``=``=` `0``): ` `        ``return` `a  ` `    ``else``: ` `        ``return` `gcd(b, a ``%` `b) ` `     `  `# Returns true if all prime  ` `# factors of y divide x. ` `def` `isDivisible(x,y): ` `     `  `    ``if` `(y ``=``=` `1``): ` `        ``return` `1` ` `  `    ``z ``=` `gcd(x, y); ` `     `  `    ``if` `(z ``=``=` `1``): ` `        ``return` `false; ` `     `  `    ``return` `isDivisible(x, y ``/` `z); ` ` `  `# Driver Code ` `x ``=` `18` `y ``=` `12` `if` `(isDivisible(x, y)): ` `    ``print``(``"Yes"``) ` `else``: ` `    ``print``(``"No"``) ` ` `  `# This code is contributed by Sam007 `

## C#

 `// C# program to find if all  ` `// prime factors of y divide x. ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``public` `static` `int` `gcd(``int` `a, ``int` `b) ` `    ``{  ` `        ``return` `b == 0 ? a : gcd(b, a % b); ` `    ``} ` `     `  `    ``// Returns true if all prime factors ` `    ``// of y divide x. ` `    ``static` `bool` `isDivisible(``int` `x, ``int` `y) ` `    ``{ ` `        ``if` `(y == 1) ` `            ``return` `true``; ` `             `  `        ``int` `z = gcd(x, y); ` `     `  `        ``if` `(z == 1) ` `            ``return` `false``; ` `     `  `        ``return` `isDivisible(x, y / z); ` `    ``} ` ` `  `    ``// Driver program to test above functions ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``int` `x = 18, y = 12; ` `         `  `        ``if` `(isDivisible(x, y)) ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` `

Output :

```Yes
```

Time Complexity:Time complexity for calculating GCD is O(log min(x, y)), and recursion will terminate after log y steps because we are reducing it by a factor greater than one. Overall Time complexity: O(log2y)

This article is contributed by Harsha Mogali. 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.

My Personal Notes arrow_drop_up

Improved By : vt_m, Sam007

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.