program eratosthene
  implicit none
  integer, parameter    :: n = 1000
  logical, dimension(n) :: tab_nombres
  integer               :: imax
  integer i, j

  tab_nombres(:) = .true.

  imax = n**0.5
  do i=2, imax
    if( tab_nombres(i) ) then
      do j=i+1,n
        if ( tab_nombres(j) .and. j/i*i == j ) &
          tab_nombres(j) = .false.
      end do
    end if
  end do

  print *,"Les nombres premiers entre 1 et ", n, " sont :"
  do i=2,n
    if ( tab_nombres(i) ) print *,i
  end do
end program eratosthene

