给定两个正数x和y。找到最大整数a:
- a除以x即x%a = 0
- a和y是互质的,即gcd(a,y)= 1
例子 :
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.
方法:在这里,首先我们通过找到x和y的最大公约数(gcd)并将x除以该gcd来从x中删除x和y的公因数。
数学上:
x = x / gcd(x, y) —— STEP1
现在,重复步骤1,直到得到gcd(x,y)= 1。
最后,我们返回a = x
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
输出 :
5
1
7