GFG App
Open App
Browser
Continue

# Largest number that divides x and is co-prime with y

Given two positive numbers x and y. Find the maximum valued integer a such that:

1. a divides x i.e. x % a = 0
2. a and y are co-prime i.e. gcd(a, y) = 1

Examples :

```Input : x = 15
y = 3
Output : a = 5
Explanation: 5 is the max integer
which satisfies both the conditions.
15 % 5 =0
gcd(5, 3) = 1
Hence, output is 5.

Input : x = 14
y = 28
Output : a = 1
Explanation: 14 % 1 =0
gcd(1, 28) = 1
Hence, output is 1. ```

Approach: Here, first we will remove the common factors of x and y from x by finding the greatest common divisor (gcd) of x and y and dividing x with that gcd.
Mathematically:

` x = x / gcd(x, y) —— STEP1 `

Now, we repeat STEP1 till we get gcd(x, y) = 1.
At last, we return a = x

Algorithm:

Step 1: Define a function named gcd to find gcd of two numbers a and b.
Step 2: If a or b is equal to 0, return 0. If a is equal to b, return a.
Step 3: If a is greater than b, return gcd(a-b, b).
Step 4: If b is greater than a return gcd(a b-a).
Step 5: Define a function named cpFact to find the largest coprime divisor of two numbers x and y.
Step 6: While gcd(x, y) is not equal to 1, divide x by gcd(x,y).
Step 7: Return x as the largest coprime divisor.

below is the code implementation of the above approach:

## C++

 `// CPP program to find the` `// Largest Coprime Divisor`   `#include ` `using` `namespace` `std;`   `// Recursive function to return gcd` `// of a and b` `int` `gcd(``int` `a, ``int` `b)` `{` `    ``// Everything divides 0` `    ``if` `(a == 0 || b == 0)` `        ``return` `0;`   `    ``// base case` `    ``if` `(a == b)` `        ``return` `a;`   `    ``// a is greater` `    ``if` `(a > b)` `        ``return` `gcd(a - b, b);` `    ``return` `gcd(a, b - a);` `}`   `// function to find largest` `// coprime divisor` `int` `cpFact(``int` `x, ``int` `y)` `{` `    ``while` `(gcd(x, y) != 1) {` `        ``x = x / gcd(x, y);` `    ``}` `    ``return` `x;` `}`   `// divisor code` `int` `main()` `{` `    ``int` `x = 15;` `    ``int` `y = 3;` `    ``cout << cpFact(x, y) << endl;` `    ``x = 14;` `    ``y = 28;` `    ``cout << cpFact(x, y) << endl;` `    ``x = 7;` `    ``y = 3;` `    ``cout << cpFact(x, y);` `    ``return` `0;` `}`

## Java

 `// java program to find the` `// Largest Coprime Divisor` `import` `java.io.*;`   `class` `GFG {` `    ``// Recursive function to return gcd` `    ``// of a and b` `    ``static` `int` `gcd(``int` `a, ``int` `b)` `    ``{` `        ``// Everything divides 0` `        ``if` `(a == ``0` `|| b == ``0``)` `            ``return` `0``;`   `        ``// base case` `        ``if` `(a == b)` `            ``return` `a;`   `        ``// a is greater` `        ``if` `(a > b)` `            ``return` `gcd(a - b, b);` `        ``return` `gcd(a, b - a);` `    ``}`   `    ``// function to find largest` `    ``// coprime divisor` `    ``static` `int` `cpFact(``int` `x, ``int` `y)` `    ``{` `        ``while` `(gcd(x, y) != ``1``) {` `            ``x = x / gcd(x, y);` `        ``}` `        ``return` `x;` `    ``}`   `    ``// divisor code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `x = ``15``;` `        ``int` `y = ``3``;` `        ``System.out.println(cpFact(x, y));` `        ``x = ``14``;` `        ``y = ``28``;` `        ``System.out.println(cpFact(x, y));` `        ``x = ``7``;` `        ``y = ``3``;` `        ``System.out.println(cpFact(x, y));` `    ``}` `}`   `// This article is contributed by vt_m.`

## Python3

 `# Python3 code to find the` `# Largest Coprime Divisor`   `# Recursive function to return` `# gcd of a and b` `def` `gcd (a, b):` `    `  `    ``# Everything divides 0` `    ``if` `a ``=``=` `0` `or` `b ``=``=` `0``:` `        ``return` `0` `    `  `    ``# base case` `    ``if` `a ``=``=` `b:` `        ``return` `a` `        `  `    ``# a is greater` `    ``if` `a > b:` `        ``return` `gcd(a ``-` `b, b)` `    `  `    ``return` `gcd(a, b ``-` `a)`   `# function to find largest` `# coprime divisor` `def` `cpFact(x, y):` `    ``while` `gcd(x, y) !``=` `1``:` `        ``x ``=` `x ``/` `gcd(x, y)` `    ``return` `int``(x)` `    `  `# divisor code` `x ``=` `15` `y ``=` `3` `print``(cpFact(x, y))` `x ``=` `14` `y ``=` `28` `print``(cpFact(x, y))` `x ``=` `7` `y ``=` `3` `print``(cpFact(x, y))`   `# This code is contributed by "Sharad_Bhardwaj".`

## C#

 `// C# program to find the` `// Largest Coprime Divisor` `using` `System;`   `class` `GFG {`   `    ``// Recursive function to return gcd` `    ``// of a and b` `    ``static` `int` `gcd(``int` `a, ``int` `b)` `    ``{`   `        ``// Everything divides 0` `        ``if` `(a == 0 || b == 0)` `            ``return` `0;`   `        ``// base case` `        ``if` `(a == b)` `            ``return` `a;`   `        ``// a is greater` `        ``if` `(a > b)` `            ``return` `gcd(a - b, b);`   `        ``return` `gcd(a, b - a);` `    ``}`   `    ``// function to find largest` `    ``// coprime divisor` `    ``static` `int` `cpFact(``int` `x, ``int` `y)` `    ``{` `        ``while` `(gcd(x, y) != 1) {` `            ``x = x / gcd(x, y);` `        ``}`   `        ``return` `x;` `    ``}`   `    ``// divisor code` `    ``public` `static` `void` `Main()` `    ``{`   `        ``int` `x = 15;` `        ``int` `y = 3;` `        ``Console.WriteLine(cpFact(x, y));`   `        ``x = 14;` `        ``y = 28;` `        ``Console.WriteLine(cpFact(x, y));`   `        ``x = 7;` `        ``y = 3;` `        ``Console.WriteLine(cpFact(x, y));` `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 ` ``\$b``)` `        ``return` `gcd(``\$a` `- ``\$b``, ``\$b``);` `    ``return` `gcd(``\$a``, ``\$b` `- ``\$a``);` `}`   `// function to find largest` `// coprime divisor` `function` `cpFact( ``\$x``, ``\$y``)` `{` `    ``while` `(gcd(``\$x``, ``\$y``) != 1) ` `    ``{` `        ``\$x` `= ``\$x` `/ gcd(``\$x``, ``\$y``);` `    ``}` `    ``return` `\$x``;` `}`   `// Driver Code` `\$x` `= 15;` `\$y` `= 3;` `echo` `cpFact(``\$x``, ``\$y``), ``"\n"``;` `\$x` `= 14;` `\$y` `= 28;` `echo` `cpFact(``\$x``, ``\$y``), ``"\n"``;` `\$x` `= 7;` `\$y` `= 3;` `echo` `cpFact(``\$x``, ``\$y``);`   `// This code is contributed by aj_36` `?>`

## Javascript

 ``

Output :

```5
1
7```

My Personal Notes arrow_drop_up