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:


Nenhum comentário:

Postar um comentário