/****   CRIVELLO DI ERATOSTENE  
        ======================



INPUT:  

Una intero n>=2 (argomento della linea di comando)

  
OUTPUT:

Stampa i numeri primi p t.c  2<= p <=n.


Ad esempio:

java  Eratostene  100


deve stampare

2 3 5 7 11 13 17 19 23 29 31 37 43 41 47 53 59 61 71 67 79 73 83 89 97 


----

Per rappresentare l'insieme degli interi 2...n
viene  utilizzata una collezione di tipo Set<Integer>.
Notare che non si puo' usare il tipo Set<int>  in quanto int
e' un tipo primitivo e non un tipo riferimento.


Il programma  e' compilabile ma da' un errore in esecuzione.

Correggere il codice (senza cambiare la definizione di setPrimi).




*/


import java.util.*;

public class Eratostene{
    
    public static void main(String [] args) {


	int n = Integer.parseInt(args[0]); // si assume n>=2


 // costruisco insieme  setPrimi = {2,...,n}

	Set<Integer> setPrimi = new  HashSet<Integer> ();
	for(int k=2 ; k <=n ; k++){
	    setPrimi.add(new Integer(k));
	}
	
// per ogni k in setPrimi, tolgo da setPrimi i multipli m di k tali che m < k <= n

	for(Integer k : setPrimi){
	    for(int m = 2*k ; m <= n ; m += k)  
	         setPrimi.remove(new Integer(m));
	}

 // in  setPrimi sono rimasti solamente i numeri primi p tali che 2 <= p <= n 

	for(Integer p : setPrimi)
	    System.out.print(p + " " );
	
	System.out.println();

    } // end main
} // end class




