我正在研究用于查找数字最大公约数的欧几里得算法。它可以用于查找给定两个数字的GCD。然而,如果我已知一个数字与多个其他数字的GCD,例如第一个数字与另外三个数字(包括它本身)的GCD,即:
那么输出应该是3 4 6。因为如果你逐对地计算这些数字的最大公约数(共9对,因此输入9个数字),我们就能得到上述输出。
因此,我必须找到最大公约数为输入值的数字。因此,(3,4,6)就是这些数字。
给定:a与a的GCD,a与b的GCD,a与c的GCD,a与d的GCD。 其他数字也是这样,即b与a的GCD,b与b的GCD,......
那么,我该如何找到各自的数字呢?我知道GCD(a,a)= a本身,但问题在于,给定的个别GCD是以随机顺序排列的,因此,我不知道哪个输入数字是哪两个数字的GCD。在这种情况下,我该如何找到各自的数字?
这是我的GCD代码:
int gcd(int a,int b)
{
if(b==0)
{
return a;
}
return gcd(b,a%b);
}
例如:假设给定的输入为,
3 1 3 1 4 2 2 3 6
3 //(total numbers we have to find in original array)
那么输出应该是3 4 6。因为如果你逐对地计算这些数字的最大公约数(共9对,因此输入9个数字),我们就能得到上述输出。
Explanation: 3 -> GCD of (3,3)
1 -> GCD of (3,4)
3 -> GCD of (3,6)
1 -> GCD of (4,3)
4 -> GCD of (4,4)
2 -> GCD of (4,6)
6 -> GCD of (6,6)
3 -> GCD of (6,3)
2 -> GCD of (6,4)
因此,我必须找到最大公约数为输入值的数字。因此,(3,4,6)就是这些数字。