! PROGRAMA QUE DETERMINA SE UM NÚMERO EH OU NAO PERFEITO. UM NUMERO EH PERFEITO QUANDO 
! A SOMA DOS SEUS DIVISORES EH O DOBRO DELE"
PROGRAM DIVISORES
	IMPLICIT NONE
    INTEGER NUM, DIV, SOMA_DIV

    WRITE(*,*) "PROGRAMA QUE DETERMINA SE UM NUMERO EH OU NAO PERFEITO. UM NUMERO EH PERFEITO QUANDO &
                &A SOMA DOS SEUS DIVISORES EH O DOBRO DELE"
    WRITE(*,*)	  
    WRITE(*,*) "DIGITE UM INTEIRO; P/ ENCERRAR UM INTEIRO NEGATIVO "
    READ (*,*) NUM      
    DO WHILE ( NUM >= 0)
        SOMA_DIV = 0
        DO DIV = 1, NUM, 1
           IF (MOD(NUM, DIV) == 0) THEN
              SOMA_DIV = SOMA_DIV + DIV
           END IF
        END DO   
        IF (SOMA_DIV == 2 * NUM) THEN
            WRITE(*,*) NUM, "  EH PERFEITO"
        ELSE
            WRITE(*,*) NUM, "  NAO EH PERFEITO" 
        END IF
        WRITE(*,*) "DIGITE UM INTEIRO; P/ ENCERRAR UM INTEIRO NEGATIVO "
        READ (*,*) NUM      
    END DO
    STOP
END PROGRAM DIVISORES