 Open in App
Not now

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

• Difficulty Level : Medium
• Last Updated : 18 Oct, 2022

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".```

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 the 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 divisors if and only if y/GCD has such unique prime divisor. So we have to find uniqueness for pair (x, y/GCD) using recursion.

Below is the implementation of the above approach:

## 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``;` `    ``int` `z = __gcd(x, y);` `    ``if` `(z == 1)``        ``return` `false``;` `    ``return` `isDivisible(x, y / z);``}` `// 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.``public` `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

 ``

## Javascript

 ``

Output

```Yes
```

Time Complexity: The 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)
Auxiliary Space: O(log min(x, y))

This article is contributed by Aarti_Rathi and Harsha Mogali. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.