Minha dívida é com relação a esse trecho do código da classe NumerosPrimos:
public boolean verificarPrimalidade(int numero) {
if (numero <= 1) {
return false;
}
for (int i = 2; i * i <= numero; i++) {
if (numero % i == 0) {
return false;
}
}
return true;
}
Eu entendi o porque desse código ser escrito na classe NumerosPrimos, que além de facilitar o reaproveitamento e manutenção do código ele só serve para retornar uma verificação de verdadeiro ou falso para que, nesse caso, a classe VerificadorPrimo imprima se é o número é primo ou não, a classe GeradorPrimo imprima o próximo número primo e a própria classe NumerosPrimos imprima só os números primos através do método public void listarPrimos(int limiteSuperior).
Mas eu gostaria de uma explicação do porque nessa verificação booleana o valor 2 volta como true para imprimir a resposta de que é primo?
Eu entendo o funcionamento do 'i * i <= numero, i++', mas fico confuso com o 'numero % i == 0', aqui ele pega o valor atribuído no i = 2 ou o valor do i após os loopings, se o 2 passar por esse calculo do for ele retorna falso por conta da sobra do calculo ser 0?
Então numero 2 passa pelo for ou o código já retorna true após a verificação do if que antecede o for?
Como funciona o calculo do for e a lógica aplicada?
Realmente eu não estou conseguindo entender esse funcionamento.