PROGRAM primi IMPLICIT NONE INTEGER :: n INTERFACE FUNCTION NumeriPrimi(nmax) RESULT(lista) IMPLICIT NONE INTEGER, INTENT(IN) :: nmax INTEGER, DIMENSION(nmax) :: lista END FUNCTION NumeriPrimi END INTERFACE DO PRINT *, "Digita un intero" READ *, n IF ( n .LE. 0 ) EXIT WRITE(*,*) NumeriPrimi(n) END DO STOP END PROGRAM primi FUNCTION NumeriPrimi(nmax) RESULT(lista) IMPLICIT NONE INTEGER, INTENT(IN) :: nmax INTEGER, DIMENSION(nmax) :: lista INTEGER :: i, n, quanti lista = (/ (i, i = 1, nmax) /) quanti = nmax DO i = 2, nmax IF ( lista(i) .GT. 0 ) THEN DO n = i + 1, nmax IF ( lista(n) .GT. 0 .AND. MOD(lista(n), i) .EQ. 0 ) THEN lista(n) = 0; quanti = quanti - 1 END IF END DO END IF END DO RETURN END FUNCTION NumeriPrimi