mgaikema icon

Extended Euclidean Algorithm

mgaikema | PRO | 07/17/17 08:48:25 PM UTC | 0 ⭐ | 336 👁️ | Never ⏰ | []
R |

760 B

|

None

|

0 👍

/

0 👎

rm(list=ls()) 
# Remove pre-existing objects
 
#' Extended Euclidean Algorithm
#' Computes d=gcd(u,v) and a,b that satisfy 
#' a*u+b*v=d 
#' 
#' @param u,v: Two integers, with u>v
#' @return A list with a,b,d, such that au+bv=d
gcd_E = function(u,v){
    m = matrix(c(1,0,0,1),nrow=2)                       # m = |1 0|
    n = 0                                               #     |0 1|
    
    while(v != 0){
        q = floor(u/v) # Get u/v, less the remainder
        m =  m %*% matrix(c(q,1,1,0),nrow=2,byrow=T)    # m = m * |q 1|
        temp = v                                        #         |1 0|
        v = u - q*v # (u,v)=(v,u-q*v)
        u = temp
        n = n+1
    }
    
    return( list(d=u, a=(-1)^n*m[2,2], b=(-1)^(n+1)*m[1,2]) )
}

Comments