ma quali autografi...POMODORI IN FACCIA !!!Ecco il tuo metodo Java ottimizzato.
Ora ad ogni ciclo for la VM non è costretta a ricalcolarsi una radice quadrata che non è cambiata.
Inoltre l'incremento salta tutti i numeri pari, perché il modulo 2 viene eseguito a priori.
Niente autografi, prego.codice:public static boolean prim (int a) { if (a > 2 && a % 2 == 0) return false; for (int i = 3, l = Math.sqrt(a); i <= l; i += 2) if (a % i == 0) return false; return true; };![]()
![]()
![]()
scherzi a parte,il programma cosi' funziona meglio, il doppio assegnamento nel for non l'avevo mai visto, solo ke ci sono DUE PROBLEMINI NEL TUO CODICE!![]()
innanzi tutto cosi' non funziona perchè all'intero l assegni un double quindi devi usare un cast...ma poco importa...
secondariamente il programma SBAGLIA NEI CASI BASE...e cioè dice che sia 0 che 1 sono numeri primi, in quanto lo 0 è per definizione multiplo di tutti i numeri, mentre l'uno non è primo per definizione.
La tua procedura corretta è cosi':
ora applaudi me!codice:public static boolean bol (int a) { if (a < 3) return (a>1); for (int i = 3, l = (int) Math.sqrt(a); i <= l; i += 2) if (a % i == 0) return false; return true; }![]()
![]()


Rispondi quotando