import java.util.*;
import java.io.*;

 /**
  * Elenca i numeri primi minori di un dato intero specificato dall'utente
  *
  * @author Roberto Sassi
  * @version 1.0
  *
  */
public class CercaNumeriPrimi {
 /**
  * Numero massimo di numeri primi che verranno stampati per ogni riga
  */
  public static final int PRIMI_PER_RIGA = 10;
  
 /**
  * Elenca sulla console una lista di numeri primi.
  *
  * @exception IOException Eccezione eventualmente lanciata dalle routine di 
  * input dalla console
  * @author Roberto Sassi
  * @version 1.0
  *
  */
  public static void main(String[] args) throws IOException{
    InputStreamReader flussoTesto = new InputStreamReader(System.in);
    BufferedReader bufferTastiera = new BufferedReader(flussoTesto);
    String stringaInput;
    
    System.out.print("Fino a che numero intero devo elencare i numeri primi? ");
    stringaInput = bufferTastiera.readLine();
    int interoMassimo = Integer.parseInt(stringaInput);

    Vector elencoPrimi = calcolaElencoPrimi(interoMassimo);

    System.out.println("I numeri primi richiesti sono " + 
      elencoPrimi.size() + " :");
    int numeriStampati = 0;
    for(int i=0; i<elencoPrimi.size(); i++) {
      System.out.print(((Integer) elencoPrimi.elementAt(i)).intValue() + "\t");
      numeriStampati++;
      if(numeriStampati>PRIMI_PER_RIGA) {
        System.out.print("\n");
        numeriStampati=0;
      }
    }
  }
  
 /**
  * Crea il vettore dei numeri primi
  *
  * @param massimo Numero intero massimo. Il metodo cercherà i primi minori 
  * o uguali a questo numero
  * @return Elenco dei numero primi
  * @author Roberto Sassi
  * @version 1.0
  *
  */
  public static Vector calcolaElencoPrimi(int massimo) {
    Vector elencoPrimi = new Vector();
    
    for(int i=2; i<=massimo; i++) {
      boolean isPrimo = true;
      for(int j=0; j<elencoPrimi.size(); j++)
        if(i % ((Integer) elencoPrimi.elementAt(j)).intValue() == 0) {
          isPrimo = false;
          break;
        }
      if(isPrimo) 
        elencoPrimi.addElement(new Integer(i));
    }
    
    return elencoPrimi;
  }
}