Como Descobrir se um Número é Primo em PHP (Com Código Completo e Lógica)

Dando continuidade à nossa lista de exercícios de Laços de Repetição, chegamos a um clássico absoluto da programação: o algoritmo para descobrir se um número é primo. Esse é um daqueles testes de lógica que separam os meninos dos homens (e as meninas das mulheres) nas entrevistas de estágio. Puxa a cadeira e vamos debulhar esse código!

O que são Números Primos? (A Matemática)

Um número primo é um número inteiro maior que 1 que possui exatamente dois divisores: o número 1 e ele mesmo. Em PHP, descobrimos se um número é primo utilizando o operador de módulo (%) dentro de um laço de repetição (FOR) para testar se há restos de divisões exatas.

Para refrescar sua memória lá do ensino fundamental: dizemos que um número é primo quando a única forma de dividir ele (sem deixar quebrado) é por 1 e por ele mesmo.

  • Exemplo 1: O número 2 só é divisível por 1 e por 2. (É primo).
  • Exemplo 2: O número 4 é divisível por 1, por 2 e por 4. (Não é primo, pois possui 3 divisores).

📝 Lista rápida de alguns números primos para você testar no script:

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, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211...

🧠 Sentindo a cabeça fritar com a lógica?

Criar algoritmos matemáticos no início é assustador. A maioria dos alunos trava exatamente aqui. Foi por isso que estruturei a Apostila PHP Progressivo com gabaritos detalhados passo a passo. Ter o material em PDF offline do lado do teclado salva horas de frustração no StackOverflow. Fica a dica de mestre.

A Lógica do Algoritmo em PHP

Como fazemos o computador pensar? Simples! Para sabermos se um número $n$ é primo, nós mandamos o PHP fazer força bruta. Vamos dividir esse número $n$ por todos os números menores que ele: por 2, por 3, por 4... até chegar em $(n - 1)$.

💡 O Truque do Módulo: Usaremos o operador matemático de módulo (%). Se a operação $n \bmod x = 0$ for verdadeira em qualquer momento desse laço, significa que a divisão foi exata. Logo, encontramos um divisor extra e o número NÃO é primo.

O Passo a Passo do Código:

  1. Criamos uma variável $divisores iniciando em 0.
  2. Iniciamos um laço for com um $count = 2.
  3. O laço vai rodar enquanto $count < $n.
  4. Dentro do laço, um if testa a divisão. Se o resto for 0, nós mostramos qual é o múltiplo e aumentamos nossa variável $divisores++.
  5. Fora do laço, outro if analisa: se $divisores for maior que zero, ele NÃO é primo. Se continuar zero, ele é primo!

Script PHP Completo para Detectar Primo (Com Formulário)

Aqui está a nossa solução entregando o pacote completo: um formulário HTML caprichado integrado com o script PHP de validação. Pode copiar, colar e testar no seu servidor local!

<html>
 <head>
  <title>Calculadora de Números Primos - PHP Progressivo</title>
  <style>
    body { font-family: Arial, sans-serif; padding: 20px; }
    .caixa { background: #f4f4f4; padding: 15px; border-radius: 8px; max-width: 400px; margin-bottom: 20px; }
    input[type=number] { padding: 8px; width: 100%; box-sizing: border-box; margin: 10px 0; }
    input[type=submit] { background: #0284c7; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; }
  </style>
 </head>
 <body>
  
  <div class="caixa">
    <h3>É Primo?</h3>
    <form action="" method="get">
     <label>Digite um número inteiro:</label>
     <input type="number" name="number" required />
     <input type="submit" value="Testar Número" />
    </form>
  </div>

 <?php
  // Verifica se o formulário foi enviado
  if(isset($_GET['number'])){
      
      $n = intval($_GET['number']);
      $divisores = 0;
      
      // Laço para testar todos os números menores que N
      for($count = 2; $count < $n; $count++){
          
          // Testando se a divisão é exata (resto igual a zero)
          if($n % $count == 0){
              echo "Múltiplo encontrado: $count <br />";
              $divisores++; // Incrementa contador de divisores
          }
      }
      
      echo "<hr>"; // Linha de separação
      
      // Avaliação Final
      if($divisores > 0){
          echo "<h4 style='color:red;'>Não é primo!</h4>";
          echo "<p>O número $n tem $divisores divisores além de 1 e dele mesmo.</p>";
      } else {
          // Números menores ou iguais a 1 não são primos por definição
          if($n <= 1){
              echo "<h4 style='color:red;'>Não é primo!</h4>";
              echo "<p>Números menores ou iguais a 1 não são considerados primos.</p>";
          } else {
              echo "<h4 style='color:green;'>É Primo!</h4>";
              echo "<p>O número $n é divisível APENAS por 1 e por ele mesmo.</p>";
          }
      }
  }
 ?>
 
 </body>
</html>

🚀 Domine o PHP sem depender da internet

"Apanhei muito nos exercícios de repetição na faculdade. Essa apostila resolveu meus problemas porque tem a teoria limpa e dezenas de exercícios práticos com o código fonte explicado."
— Felipe Andrade, Desenvolvedor Backend.

Tenha todos os códigos, lógicas e tutorias avançados organizados em PDF. Estude no ônibus, na fila do banco ou quando a internet cair.

Apostila Completa de PHP PDF
Baixar Apostila Completa em PDF 📥

🛠️ Dica de Sênior: Otimizando o Algoritmo

O código acima resolve o problema perfeitamente e tira nota 10 na faculdade. Mas, e se você quiser testar se o número 999.999.937 é primo? O nosso laço for rodaria quase 1 bilhão de vezes, travando seu servidor.

No mundo real da engenharia de software, nós não testamos até $(n - 1)$. Basta testar os divisores até a raiz quadrada do número ( $\sqrt{n}$ ). Se um número não possui nenhum divisor exato até a sua raiz quadrada, é matematicamente impossível que ele possua algum divisor depois dela.

Na prática, bastaria alterar o laço para for($count = 2; $count <= sqrt($n); $count++). Essa simples linha transforma um processamento que levaria segundos em algo que roda em milissegundos!

📚 Consolide seu Conhecimento (O que estudar a seguir):

Para entender esse script de olhos fechados, certifique-se de ter devorado estas aulas passadas:

Quer gabaritar todos os exercícios e dominar a Web?

Leve o arsenal completo: PHP, JavaScript, HTML, CSS, C e Java. Tudo no Mega Pack.

Download Mega Pack Apostilas Programação Progressiva

Nenhum comentário: