PROGRAM GCDLCM
IMPLICIT NONE
INTEGER :: n,m,p,q,gcd,lcm
PRINT *, "Enter two nonzero integers:"
READ *, n,m
p=MAX(n,m)
q=MIN(n,m)
CALL gcd_lcm(p,q,gcd,lcm)
PRINT *, "gcd is: ", gcd, " and lcm is: ", lcm
CONTAINS
SUBROUTINE gcd_lcm(u,v,gcd,lcm)
INTEGER, INTENT(IN) :: u,v
INTEGER, INTENT(OUT) :: gcd,lcm
INTEGER :: x,y,t
x=u
y=v
DO
IF (y<=0) THEN
EXIT
END IF
t=y
y=MOD(x,y)
x=t
END DO
gcd=x
lcm=ABS(u*v)/gcd
END SUBROUTINE gcd_lcm
END PROGRAM GCDLCM