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 Passo a Passo do Código:
- Criamos uma variável
$divisoresiniciando em 0. - Iniciamos um laço
forcom um$count = 2. - O laço vai rodar enquanto
$count < $n. - Dentro do laço, um
iftesta a divisão. Se o resto for 0, nós mostramos qual é o múltiplo e aumentamos nossa variável$divisores++. - Fora do laço, outro
ifanalisa: se$divisoresfor 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
— 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.
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:
- COMO RECEBER DADOS DE FORMULÁRIO GET - Entenda de onde vem a variável
$_GET. - OPERADORES ARITMETICOS MODULO PHP - Domine o sinal de porcentagem
%usado na lógica. - Voltar para o Índice do Curso Completo
Nenhum comentário:
Postar um comentário