Números Perfeitos em PHP: Lógica e Funções na Prática
Neste tutorial do nosso Curso de PHP, vamos resolver a incrível Questão 7 da nossa lista de exercícios sobre funções.
1. A Matemática: O que é um Número Perfeito?
Antes de programar, precisamos entender a regra do jogo. Pegue o número 6. Por quais números podemos dividir o 6 de forma exata (sem sobrar resto)? Podemos dividi-lo por 1, por 2 e por 3.
Agora, some esses divisores:
$$6 = 1 + 2 + 3$$Como a soma dos divisores resulta exatamente no próprio número, o 6 é um Número Perfeito! Veja outro exemplo famoso, o número 28. Seus divisores são 1, 2, 4, 7 e 14. Se somarmos:
$$28 = 1 + 2 + 4 + 7 + 14$$Temos outro número perfeito! Os próximos são 496 e 8128. Acredite se quiser, eles são muito raros. Até hoje, os matemáticos não sabem se existe algum número perfeito ímpar ou se eles são infinitos!
2. A Lógica de Programação
Como transformar isso em código PHP? Vamos criar uma função chamada somaDivisores($n). Dentro dela:
- Criamos uma variável
$soma = 0para acumular os valores. - Usamos um laço
forque começa no 1 e vai até$n - 1. - Dentro do laço, usamos o Operador Módulo (%). Se
$n % $i == 0, significa que a divisão é exata. Se for exata, nós adicionamos esse$ina nossa variável$soma. - No final, retornamos a soma. Se o retorno for igual ao número original, EUREKA! É perfeito.
3. O Código PHP Completo e Funcional
Preparamos um código visualmente atraente onde o usuário digita um número. O sistema dirá se aquele número é perfeito e, de bônus, vai varrer e imprimir todos os números perfeitos que existem do 1 até o número que você digitou!
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Detector de Números Perfeitos - PHP</title>
<style>
.container { max-width: 500px; margin: 30px auto; font-family: sans-serif; text-align: center; border: 2px solid #cbd5e1; padding: 30px; border-radius: 10px; background: #f8fafc; }
input[type="number"] { padding: 10px; font-size: 16px; width: 80%; margin-bottom: 15px; border-radius: 5px; border: 1px solid #94a3b8; text-align: center;}
.btn { background: #10b981; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 5px; cursor: pointer; font-weight: bold; width: 85%; }
.btn:hover { background: #059669; }
.resultado { margin-top: 20px; padding: 15px; border-radius: 5px; background: #e0f2fe; color: #0369a1; border: 1px solid #7dd3fc; text-align: left; }
</style>
</head>
<body>
<div class="container">
<h2>✨ É um Número Perfeito?</h2>
<form action="" method="get">
<input type="number" name="numero" min="1" max="10000" placeholder="Digite um número (ex: 28)" required>
<button type="submit" class="btn">Verificar e Buscar</button>
</form>
<?php
// FUNÇÃO: Calcula a soma dos divisores de um número
function somaDivisores($n) {
$soma = 0;
// Divide o número por todos os anteriores a ele
for($i = 1; $i < $n; $i++) {
if($n % $i == 0) { // Se o resto for 0, é divisor!
$soma += $i;
}
}
return $soma;
}
// Verifica se o usuário enviou o formulário
if(isset($_GET['numero'])) {
$num_usuario = intval($_GET['numero']);
echo "<div class='resultado'>";
// 1. Testa se o número digitado é perfeito
if($num_usuario == somaDivisores($num_usuario)) {
echo "<strong style='color: green; font-size: 1.2em;'>✔ O número $num_usuario É PERFEITO!</strong><br><br>";
} else {
echo "<strong style='color: red;'>❌ O número $num_usuario NÃO é perfeito.</strong><br><br>";
}
// 2. Busca todos os números perfeitos de 1 até o número digitado
echo "<b>Números perfeitos encontrados entre 1 e $num_usuario:</b><br>";
$encontrou_algum = false;
for($j = 1; $j <= $num_usuario; $j++) {
if($j == somaDivisores($j)) {
echo "➔ $j <br>";
$encontrou_algum = true;
}
}
if(!$encontrou_algum) {
echo "<i>Nenhum número perfeito encontrado nesse intervalo.</i>";
}
echo "</div>";
}
?>
</div>
</body>
</html>
⚠️ Cuidado com o Processamento!
Como os números perfeitos são calculados dividindo um por um até o infinito, testar números maiores que 10.000 pode travar ou deixar o seu navegador muito lento! Por isso, no nosso formulário HTML, colocamos uma trava de segurança max="10000".
Gostou da Lógica? Aprimore-se! 💡
Exercícios como o dos Números Perfeitos são o segredo para treinar o seu cérebro de programador. Na nossa Apostila Completa de PHP, você encontra dezenas de exercícios resolvidos e comentados como esse, prontos para você estudar.
Baixar Apostila Completa de PHP
Nenhum comentário:
Postar um comentário