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

  do i=2,n
    tab_nombres(i) = i
  end do

  imax = int(sqrt(real(n)))
  do i=2, imax
    if( tab_nombres(i) /= 0 ) then
      do j=i+1,n
        if ( tab_nombres(j) /= 0 .and. &
             mod( tab_nombres(j), i ) == 0 ) &
          tab_nombres(j) = 0
      end do
    end if
  end do

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

