public class Sequenza {
    /* 
       Questo programma calcola la sequenza "3N+1" per un dato numero 
       N e stampa il numero di valori intermedi che sono stati calcolati
       prima di ottenere 1. La sequenza 3N+1 e' costruita a partire dal
       numero intero N nel seguente modo: se N e' pari, il numero successivo
       della sequenza e' N/2, altrimenti e' 3N+1. Il numero successivo 
       della sequenza e' calcolato analogamente. Sembra (ma non e' mai 
       stato dimostrato), che dopo un numero finito di passi si raggiunga 
       sempre il valore 1.
    */

    public static void main(String[] a) {

	int N = 1000;  // numero con cui cominciare la sequenza.
	int contaElementi = 0;  // accumula il numero di elementi 
	                        // della sequenza via via calcolati.

	System.out.println("Iniziamo la sequenza con il numero: " + N);

	while (N != 1) {

	    if (N % 2 == 0) 
		N /= 2;
	    else
		N = 3 * N + 1;
 
	    contaElementi++;

	    if (contaElementi % 10 == 0)
		System.out.println();

	    System.out.print(N + "  ");

	}
	System.out.println();
	System.out.println("sono stati calcolati " + contaElementi + 
			   " elementi della sequenza");

    } // fine metodo main.


} // fine class Sequenza
