Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Desafio com números primos

Oi, estava tentando resolver um desafio de listar todos os números primos entre dois números informados porém estou empacada e não sei como resolver meu problema.

Comecei criando a lógica para verificar se o número informado é primo:

var numero = parseInt(prompt("Informe seu numero"));
var teste = true;

if (numero != 1) {

    for(var i = 2; i < numero/2; i++){

        if (numero % i == 0) {
            teste = false;
        }
    }

}

if (teste){
    document.write("Seu número é primo.");

} else {
    document.write("Seu número não é primo.");
}

Até aqui tudo funcionou como deveria, porém como eu quero uma lista de números primos, pensei em transformar isso numa função...

var numeroInicial = parseInt(prompt("Informe seu numero inicial"));
var numeroFinal = parseInt(prompt("Informe o número final"));
var teste;

function verificaPrimo(num){
    if (num != 1) {

        for(var i = 2; i < num/2; i++){

            if (num % i == 0) {
                teste = false;
            }
        }

    }

    if (teste){
    document.write("O número " + numeroInicial + " é primo.");
    document.write("<br>");

    } else {
    document.write("O número " + numeroInicial + " não é primo.");
    document.write("<br>");
    }
}

while(numeroInicial <= numeroFinal){
    verificaPrimo(numeroInicial);
    numeroInicial++;
}

Só que desse jeito ele sempre me diz que o número não é primo. E não consegui achar uma forma da variável teste ser true sem que ele dissesse que todos os números são primos... Estou num impasse. O que posso fazer pra solucionar meu problema?

2 respostas
solução!

Olá, Daniela!

Você já tentou passar a variável teste para dentro da função verificaPrimo? Assim, ela fica visível apenas dentro dessa função e sempre é redefinida a cada chamada.

Desse jeito:

function verificaPrimo(num){
    var teste = true;
        //restante do código...

Uma coisa que eu notei é que o número 4 ficaria como primo.

A fonte do erro está na condição de parada do for.

i < num/2

Se num for 4 e considerando que i sempre começa com 2, teríamos 2 < 4/2, que equivale a 2 < 2, que é false. Como nem entraria no for, o número 4 ficaria como primo.

Acho que a condição deveria ter um sinal de igualdade:

i <= num/2

Funcionou! Muito obrigada!