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