Soluzione 3.4

Ecco una possibile soluzione: il calcolo dei numeri primi minori o uguali al numero inserito richiede di usare due cicli annidati.
import java.util.Scanner;

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

      Scanner in = new Scanner(System.in);
      int maxInt = 0;
      while (maxInt <=0) //in questo "ciclo e mezzo" non abbiamo usato una
	  {              //variabile booleana done, che sarebbe stata superflua
	  System.out.println("Inserire un intero positivo");
	  maxInt = in.nextInt();
	}

      System.out.println("Numeri primi <= " + maxInt +":");
      for (int i = 1; i <= maxInt; i++)
	{
	  boolean isPrime = true;	  
	  for (int divisor = 2; divisor <= i / 2 && isPrime; divisor++)
	    {  //attenzione alle condizioni di uscita di questo ciclo for!
	      if (i % divisor == 0)
		isPrime = false;
	    }
	  if(isPrime)
	    System.out.println(i);
	}
    }
}