// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006
// Capitulo 6: Tipos Estructurados

// Programa que escribe los números primos comprendidos entre 2 y 99
// aplicando el algoritmo de Eratóstenes.

#include<iostream>
#include <string>

using namespace std;

// Definición de constantes
const int N = 100;

// Programa principal
int main()
{
  // Declaración de variables
  int Eras[N]; // Tabla cuyas componentes valen 0 si el índice correspondiente
               // no es un número primo o 1 en otro caso
  int i,j;     // Contadores de los índices

  // Inicializamos la tabla Eras con valores a 1
  for ( i = 0; i < N; i++ ) Eras[i] = 1;

  // Ponemos a 0 los índices correspondientes a los no primos
  // Al no haber múltiplos de i mayores que N/2 y menores que N
  // ponemos la condición "i < N/2" en lugar de "i < N"
  for ( i = 2; i < N/2; i++ )
    // Ponemos a 0 los múltiplos del número primo encontrado i
    // {PRE: i es un número primo}
    if ( Eras[i] == 1 )
      for ( j = 2 * i; j < N; j = j + i )
        Eras[j] = 0;

  // Escribimos los primos (índices con el valor 1)
  for ( i = 2; i < N; i++ )
    if ( Eras[i] == 1 ) cout << i << " ";

  cout << endl;

  return 0;
}