! Using a LINGO Procedure for computing the
Least Common Multiple of a pair of numbers;
! Keywords: GCD, Greatest Common Divisor,
LCM, Least Common Multiple, Procedures in LINGO, Euclid's algorithm;
DATA:
X = 3.7;
Y = 15;
ENDDATA
PROCEDURE GETGCD:
! Inputs:
GCDPR = previous Greatest Common Divisor,
GCDNTR = new term to include in GCD calculation,
Outputs:
GCDNU = GCD( GCDPR, GCDNTR);
GCDTOLR = 10^(-13); !Zero tolerance;
GCDX = GCDPR;
! Make GCDRM the smaller of the two;
@IFC( GCDX #LT# GCDNTR:
GCDNU = GCDNTR;
GCDRM = GCDX;
@ELSE
GCDNU = GCDX;
GCDRM = GCDNTR;
);
! Now use Euclid's algorithm. If GCDNU divides GCDX,
then the remainder is zero;
@WHILE( GCDRM #GT# GCDTOLR:
GCDX = GCDNU;
GCDNU = GCDRM;
! Get the remainder of GCDX/GCDNU;
GCDRM = @MOD( GCDX, GCDNU);
);
ENDPROCEDURE
PROCEDURE GETLCM:
! Inputs:
LCMPR = previous Greatest Common Divisor,
LCMNTR = new term to include in GCD calculation,
Outputs:
LCMNU = LCM( GCDPR, GCDNTR);
GCDPR = LCMPR;
GCDNTR = LCMNTR;
GETGCD;
LCMNU = @ABS( GCDPR* GCDNTR)/GCDNU;
ENDPROCEDURE
CALC:
! Calculate the LCM of X and Y;
@SET('TERSEO',2); ! Turn off default output;
LCMPR = X;
LCMNTR = Y;
GETLCM;
@WRITE(' Least Common Multiple of ', X,' and ', Y,' = ', @FORMAT(LCMNU,'20.10g'), @NEWLINE(1));
ENDCALC
|