Prolog Extended Euclidian Algorithm

Viewed 338

I have been struggling with some prolog code for several days and I couldn't find a way out of it. I am trying to write the extended Euclidean algorithm and find values p and s in :

a*p + b*s = gcd(a,b)

equation and here is what I have tried :`

 common(X,X,X,_,_,_,_,_,_).
 common(0,Y,Y,_,_,_,_,_,_).
 common(X,0,X,_,_,_,_,_,_).

 common(X,Y,_,1,0,L1,L2,SF,TF):-
                                  append(L1,1,[H]),
                                  append(L2,0,[A]),
                                  SF is H ,
                                  TF is A,
                                  common(X,Y,_,0,1,[H],[A],SF,TF).

 common(X,Y,_,0,1,L1,L2,SF,TF):-
                                  append(L1,0,[_,S2]),
                                  append(L2,1,[_,T2]),
                                  Q is truncate(X/Y),
                                  S is 1-Q*0,T is 0-Q*1 ,
                                  common(X,Y,_,S,T,[S2,S],
                                  [T2,T],SF,TF).

 common(X,Y,N,S,T,[S1,S2],[T1,T2],SF,TF):-
                                  Q is truncate(X/Y),
                                  K is X-(Y*Q),
                                  si_finder(S1,S2,Q,SF),
                                  ti_finder(T1,T2,Q,TF),

common(Y,K,N,S,T,[S2,S],[T2,T],SF,TF).


si_finder(PP,P,Q,C):- C is  PP - Q*P.

ti_finder(P2,P1,QA,C2):- C2 is P2 - QA*P1.

After a little search I found that s and p coefficients start from 1 and 0 and the second values for them are 0 and 1 respectively.Then it continues in a pattern which is what I have done in si_finder and ti_finder predicates.Common predicates are where I tried to control the pattern recursively. However the common predicates keeps on returning false in every call. Can anyone help me implement this algorithm in Prolog.

Thanks in advance.

1 Answers
Related