Gostou do nosso conteúdo? Te ajudou?
Nos ajude também! Faça um PIX, de qualquer valor:
programacao.progressiva@gmail.com

Como Verificar se o Número é Primo em JavaScript

Nesta aula de nosso curso de JavaScript, vamos aprender como verificar se um número é primo ou não, bem como achar números primos em qualquer intervalo.

Números Primos na Matemática

Na Matemática, dizemos que um número é primo (de uma maneira mais simplificada), se ele for divisível somente por 1 e por ele mesmo.

Ou seja, se você dividir ele por outro número que não seja 1 nem ele mesmo, vai dar quebrado.

O 7, por exemplo, só podemos dividir por 1 ou por 7.
O 11 também, só podemos dividir por 1 e ele mesmo.

Exemplo de números primos até 100: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97...

O 4, por exemplo, não é primo. Podemos dividir por 1, por 2 e por 4.
O 6 também não, pois é divisível por 2 e por 3, além de ser divisível por 1 e ele mesmo, o seis.

Testar se o número é primo em JS

Crie um script em JS que diz se um número fornecido pelo usuário é primo ou não.

Vamos pedir um número ao usuário e armazenar na variável numero.
Depois, vamos fazer uma variável de contadora, a count, que vai assumir todos os valores de 1 até numero, dentro de um laço FOR.

Vamos usar também uma variável chamada divisores, que é inicializada com 0 e ela vai armazenar a quantidade de divisores do número fornecido pelos usuários.

Cada vez que encontrarmos um divisor (resto da divisão de numero por 1, 2, 3, 4, ...), incrementamos a divisores. Ao final do laço, se ela for igual a 2, é primo.
Se for maior que 2, não é primo.

Código HTML:
<!DOCTYPE html>
<html>
 <head>
   <title>Apostila JavaScript Progressivo</title>
   <script type="text/javascript" src="script.js"></script>
 </head>
 <body>
   Número para teste: <input id="num" type="number" /> <br />
   <button onclick="primo()">Testar</button><br />
   Resultado: <div id="resposta">
 </body>
</html>
script.js:
function primo(){
  var numero = parseInt(document.getElementById('num').value);
  var resposta = document.getElementById('resposta');
  var divisores=0;

  for(var count=1 ; count<=numero ; count++)
   if(numero % count == 0)
   	divisores++;
  
  if(divisores==2)
  	resposta.innerHTML='É primo';
  else
  	resposta.innerHTML='Não é primo';
}

Resultado:

Número para teste:

Resultado:




Exibir todos os primos em um intervalo

Agora vamos mais além.
O usuário vai fornecer dois números, o inicio e o fim, e nosso script vai mostrar TODOS os primos dentro desse intervalo!

Usaremos uma técnica chamada: aninhamento, pois vamos aninhar um laço FOR dentro de outro.
Ou seja, vai ter um FOR dentro de outro laço FOR.

O primeiro laço FOR faz com que a variável count receba todos os valores de inicio até fim.
Assim que entra no primeiro laço, precisamos colocar a variável divisores como 0.

Em cada valor desse de count, vamos testar se ele é primo.
Para isso, usamos o código do exemplo anterior.
Ou seja, vamos pegar o resto da divisão entre count e 1, 2, 3, ..., count.

Se ao final desse laço interno a variável divisores for igual a 2, é porque tal número é primo, e adicionamos essa informação na string texto.

Findado ambos laços, mandamos essa string para a página HTML, via propriedade innerHTML da div resposta.

Código HTML:
<!DOCTYPE html>
<html>
 <head>
   <title>Apostila JavaScript Progressivo</title>
   <script type="text/javascript" src="script.js"></script>
 </head>
 <body>
   Inicio do intervalo: <input id="inicio" type="number" /> <br />
   Fim do intervalo   : <input id="fim" type="number" /> <br />
   <button onclick="primo()">Testar</button><br />
Resultado: <div id="resposta">
 </body>
</html>
script.js:
function primo(){
  var inicio = parseInt(document.getElementById('inicio').value);
  var fim = parseInt(document.getElementById('fim').value);
  var resposta = document.getElementById('resposta');
  var texto='';
  var divisores;

  for(var count=inicio ; count<=fim ; count++){
  	divisores=0;
  	for(var aux=1 ; aux<=count ; aux++)
  		if(count % aux == 0)
  			divisores++;

  	if(divisores==2)
  		texto += count + '<br />';
  }

  resposta.innerHTML = texto;
}
Resultado:


Inicio do intervalo:
Fim do intervalo :

Resultado:


5 comentários:

  1. Obrigado pela dica.
    Solução bem pensada!
    Aparece uma outra opção que ainda não descobri como se faz.

    ResponderExcluir
    Respostas
    1. Verdade. Não repassou a segunda opção. Mas, encontrei a solução assim. Por exemplo, números primos até 100:
      let i = 2;
      let j = 1;
      let soma = 0;
      console.log(`Números primos de 1 até 100 é: `);
      while(i < 100){
      j = 2;
      while(j < i){
      if(i % j ==0){
      j = i + 1;
      }else{
      j = j + 1;
      }
      }
      if( j == i ){
      console.log(i)
      soma = soma + i;
      }
      i = i +1;
      }

      console.log(`soma dos números primos: ${soma.toLocaleString("pt-BR") }`)

      Excluir
  2. Um erro. E eu queria saber como resolver. Se vc colocar muitos numeros acaba que buga o script e da erro como resolver ?

    ResponderExcluir
  3. Se vc colocar tipo 0010191938383882188181813 muitos numeros assim acaba que buga o site como resolver ?

    ResponderExcluir
  4. Se vc colocar muitos numeros como 1010202029393838383727272729 acaba que buga o "site" eu como que resolve isso ?

    ResponderExcluir