GCD如果为正数和负数

GCD if positive and negative numbers

本文关键字:如果 GCD      更新时间:2023-10-16

如下所述: gcd(a,b) = gcd(-a,b) = gcd(-a,-b)。但是,当我使用以下代码时,我会获得不同的输出,以将输入为(-4,-8)。

gcd(x,y)给出-4 wheras gcd(abs(x),abs(y))给出4。

可以帮助我了解我错了的地方。

int gcd(int a ,int b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
 int main()
{
    int x,y;
    cin>>x>>y;
    cout<<gcd(x,y)<<endl;   // gives -4
    cout<<gcd(abs(x),abs(y))<<endl;   //gives 4
    return 0;
}

您没有考虑到输出范围中有一个加号或负符号,这会破坏您的算法,它断言负数和正数应视为正数整数。离散数学中的形式集理论具有不同的术语,用于与大多数编程语言不相容的符号。

使用递归中的C 中最大的共同点

int GCD(int A,int B)
{
    if(A==0) return B;
    if(B==0) return A;
    A=abs(A);
    B=abs(B);
    if(A>B) return GCD(B,A);
    return GCD(B%A,A);
}

您的算法不能涵盖所有正数和负数。使用下面的代码。

int gcd(int a, int b){
    a = abs(a);b = abs(b);
    if (a == 0)
        return b;
    if (b == 0)
        return a;
    if (a == b)
        return a;
    if (a > b)
        return gcd(a - b, b);
    return gcd(a, b - a);
}
相关文章: