Eu peguei esse código no site do MIT e eu achei legal e queria entender melhor como ele funciona. O funcionamento básico eu entendi, mas tem uns detalhes que eu queria saber.
Então eu resolvi fazer um Estudo Rápido, para analisar e entender o código. Quem puder me ajudar eu agradeço!
Para esclarecer: número primo é todo número divisível apenas por 1 e por ele mesmo. Exemplos: 2, 3, 5, 7, 11 (eu poderia ir até 999.983: calculei com esse programa, hahaha
)
O código do programa é o seguinte:
public class Primes
{
public static void main(String[] args)
{
int nValues = 50;
boolean isPrime = true;
for(int i = 2; i <= nValues; i++)
//a condição é imprimir todos os primos menores ou iguais a 'nValues'
{
isPrime = true;
for(int j = 2; j < i; j++)
{
if (i % j == 0)
//aqui a verificação é se i é divisível por j
//se for, o número não é primo, pois j é igual a 2
//e um número só é primo se for divisível por 1 e
//por ele mesmo
//ou seja, se a divisão de i por j tiver resto igual a
//zero, ele é divisível por j
{
isPrime = false;//se não for primo
break; //não é exibido
}
}
if (isPrime)//se for primo o número é exibido
System.out.println(i);
}
}
}
Os comentários são meus, mas algumas coisas eu não entendi, por exemplo:
- No primeiro for, porque a variável booleana isPrime é definida novamente, ela já não foi criada com esse valor?
- No segundo for, a condição para execução do loop é "(int j = 2; j < i; j++)", ou seja, enquanto j for menor que i, certo? Ou essa condição quer dizer outra coisa?
- A verificação para saber se um número é primo pode ser ver se ele é divisível por 2. Se for ele não é primo. Se não for ele é primo. Mas então, porque j precisa ser incrementado?
- (i % j == 0) Essa parte do código (a condição do primeiro if), significa: resto da divisão de i por j igual a 0, certo?
São essas minhas dúvidas. Achei bem legal esse programa, eu dei uma incrementada nele e fiz um que copia a lista dos números para um arquivo ‘.txt’. Eu fiz isso porque quando eu calculei uma lista de primos até 100.000, o prompt não mostrava todos.
Tork
