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:
- a divides x i.e. x % a = 0
- 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 <bits/stdc++.h> 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
<?php // PHP program to find the // Largest Coprime Divisor // Recursive function to // return gcd of a and b function gcd( $a , $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 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
<script> // Javascript program to find the // Largest Coprime Divisor // Recursive function to // return gcd of a and b function gcd(a, 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 function cpFact(x, y) { while (gcd(x, y) != 1) { x = x / gcd(x, y); } return x; } // Driver Code let x = 15; let y = 3; document.write(cpFact(x, y) + "<br>" ); x = 14; y = 28; document.write(cpFact(x, y), "<br>" ); x = 7; y = 3; document.write(cpFact(x, y)); // This code is contributed by gfgking </script> |
Output :
5 1 7
Please Login to comment...