-
Notifications
You must be signed in to change notification settings - Fork 305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Desafio 14 #11
Comments
Olá, não sou a Cami, mas posso ajudar kkk. Os números primos são aqueles que apresentam apenas dois divisores: um e o próprio número. E precisam ser maiores do que um. Na primeira verificação, ele testa se o número corrente é o próprio 1 (n < 2). Como o número 1 não é primo, logo retorna falso. Caso não seja o número 1, ele verifica se o número corrente é divisível pelo contador, no intervalo de 2 até n-1. Portanto, ele acaba filtrando só os números primos. Quanto ao uso do abs(), acho que foi só pra 'enfeitar' o código...caso tenho algum número negativo na lista. Pro exemplo que a Cami passou, realmente não é necessário. |
Então, vamos lá.
// Função que verifica se um número é primo
public static boolean isPrimo(int n) {
// Verifica se o número é menor ou igual a 1, caso contrário, não é primo
if (n <= 1) {
return false;
}
// Faz um loop de 2 até a raiz quadrada do número
for (int i = 2; i * i <= n; i++) {
// Se o número for divisível por algum valor no intervalo, não é primo
if (n % i == 0) {
return false;
}
}
// Se não foi encontrado divisor no loop, o número é primo
return true;
}
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
// Cria uma nova lista que conterá os números primos usando a Stream API
List<Integer> numerosPrimos = numeros.stream()
// Usa o método filter para selecionar apenas os números que atendem à condição
// definida pelo predicado isPrimo
.filter(Main::isPrimo) // A função Main::isPrimo refere-se ao método isPrimo na classe Main
// Coleta os números filtrados em uma nova lista
.collect(Collectors.toList());
// Imprime a lista de números primos
System.out.println("Números primos na lista: " + numerosPrimos);
}
public static boolean isPrimo(int n) {
// Obtém o valor absoluto do número para garantir que seja positivo
n = Math.abs(n);
// Verifica se o número é menor ou igual a 1, caso contrário, não é primo
if (n <= 1) {
return false;
}
// Faz um loop de 2 até a raiz quadrada do número
for (int i = 2; i * i <= n; i++) {
// Se o número for divisível por algum valor no intervalo, não é primo
if (n % i == 0) {
return false;
}
}
// Se não foi encontrado divisor no loop, o número é primo
return true;
}
} Respondi tua dúvida? |
Usei um metodo parecido, só acrescentei um "if" antes do loop eliminando todos os pares exceto o 2 diminuirndo assim o numero de loops necessários. |
Ola @cami-la , tudo bem?
travei no desafio 14, encontrei um aluno que fez um codigo genial:
testei e funcionou, porem nao entendi, porque ele utilizou o Math.abs, pesquisei sobre essa função, e ela serve para retornar o valor absoluto, como utilizamos divisao com mod zero, seria mesmo necessario? não entend o fato delle utilizar tambem :
.filter(n -> { if (Math.abs(n) < 2) return false;
, qual seria o sentido de comprar se o valor absoluto de "n" por exemplo da lista, se o valor absoluto de 2 é menor que 2? e caso seja, retorne false e por ai segue o codigo dele, poderia me explicar o codigo dele, assim posso tentar entender a logica deleThe text was updated successfully, but these errors were encountered: