      PROGRAM MAIN
      IMPLICIT NONE
      INTEGER IFACT(11),IDIV,I,INOM,IRESTE
      LOGICAL LTST,LDIV

      DATA IFACT /2,3,5,7,11,13,17,19,23,29,31/

 100  CONTINUE
      WRITE(6,*) 
      WRITE(6,*) ' Donner un nombre entier < 1000 '
      WRITE(6,*) ' (0 arrete le programme)'
      WRITE(6,*) 
      READ(5,*) INOM
      
      IF (INOM.NE.0) THEN

C test : INOM < 0 ?

       IF (INOM.LT.0) THEN
        WRITE(6,*) ' votre nombre doit etre > 0 '
        GO TO 100
       END IF

C la decomposition

 121   CONTINUE
       LDIV=.FALSE.
       DO I=1,11
        IF (.NOT.LDIV) THEN
         IDIV=INOM/IFACT(I)
         IRESTE=INOM-IDIV*IFACT(I)
         IF (IRESTE.EQ.0) THEN
          WRITE(6,*) ' Nombre est divisible par ',IFACT(I)
          INOM=INOM/IFACT(I)
          LDIV=.TRUE.
         END IF
        END IF
       END DO
       IF (LDIV) THEN
        IF (INOM.NE.1) GO TO 121
       ELSE
        WRITE(6,*) INOM,' est nombre premier '
       END IF

C nouveau essai

       WRITE(6,*) 
       WRITE(6,*) ' - - - - - - - - - - - - - - - - - - '
       WRITE(6,*) 
       GO TO 100
      END IF

      END
 
