Ciao a tutti,

Scusate il titolo, ma non sapevo proprio come definire il problema.

Ho una (semplicissima) funzione che mi permette di individuare se un numero è primo.

Sapete spiegarmi per quale ragione, in questo modo funziona:
codice:
  public static boolean isPrimo(int n) {
    if(n==1) return false;
    else if((n%2==0) && (n!=2)) return false;
	
    for(int i=3; i<n; i+=2) {
      if((n%i == 0) && (n!=i)) return false;
    }
    
    return true;
  }
Ma se faccio
codice:
  public static boolean isPrimo(int n) {
    if(n==1) return false;
	else if((n%2==0) && (n!=2)) return false;
	
	for(int i=3; i<((int)Math.sqrt(n)); i+=2) {
	  if((n%i == 0) && (n!=i)) return false;
	}
    
	return true;
  }
Aggiungendo cioè (int)Math.sqrt(n) questa non funziona più, dicendomi che anche 9 (e gli altri dispari) sono primi?

Grazie! ^^