如何用Ada编写递归GCD程序?

问题描述 投票:0回答:1

我需要 ADA 中的递归扩展 Gcd。我在 C 和 Ada 中有两个类似的函数,但只有 C 可以工作。怎么解决?

C:

int extended_gcd(int a, int b, int* x, int* y) {
if (b == 0) {
    *x = 1;
    *y = 0;
    return a;
}
int x1, y1;
int g = extended_gcd(b, a % b, &x1, &y1);
*x = y1;
*y = x1 - y1 * (a / b);

return g; }

艾达:

function extended_gcd(A,B: Integer; X,Y: out Integer) return Integer is 
        G :Integer;
    X1,Y1 :Integer;
begin
    if B = 0 then 
        X := 1;
        Y := 0;
        return A;
    end if;     

    G := extended_gcd(B,A mod B,X1,Y1);
    X := Y1;
    Y := X1 - Y1 * (A/B);
    return G;
end extended_gcd;

输入a = -56,b= 15

C 输出:1,x = 4,y = 15

ADA 输出:1 x = 4,y = 11

ada
1个回答
0
投票

C

%
运算符是 余数 运算符,不是模。等效的 Ada 运算符是
rem
,而不是
mod
。尝试使用
rem
而不是
mod
,那么您应该会得到相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.