Fatoração Prima
Um número primo é um número divisível somente por 1 e ele mesmo. Por exemplo, 5 é divisível somente por 1 e 5, então é primo, mas 10 não é um número primo porque é divisível tanto por 2 e 5 como por 1 e 10.
Todos os números podem ser expressados como uma multiplicação de números primos. Por exemplo, os fatores de 10 são 1, 2, 5 e 10. 2 e 5 são ambos números primos. Assim, a fatoração prima de 10 é 2 x 5.
Normalmente, é mais fácil encontrar fatores primos iniciando com números primos menores. Por exemplo, ao fatorar o número 72, vamos começar dividindo-o por 2, que nos deixa com 36. Observa-se que ainda é divisível por 2, então dividimos mais uma vez, obtendo 18. Repetimos isso, nos deixando com 9. Percebemos, então, que 9 não é divisível por 2 e, portanto, olhamos para o próximo número primo inteiro que é divisor do número, que no caso é 3. Em seguida, dividimos 9 por 3, deixando-nos com 3. Portanto, 72 = 23 x 32.
Com números pequenos, podemos fazer essa conta até de cabeça, mas com números maiores, o processo fica mais complicado. A seguinte função permite isso:
function primeFactors($n) {
$d = 0;
$factors = [];
while ($n%2 == 0) {
$factors[2] = 2;
$n = $n/2;
$d++;
}
if($d > 0) {
$factors[2] = $d;
$d = 0;
}
for ($i = 3; $i <= sqrt($n); $i = $i+2, $d = 0) {
while ($n%$i == 0) {
$d++;
$n = $n/$i;
}
if($d > 0) {
$factors[$i] = $d;
}
}
if ($n > 2) {
$factors[$n] = 1;
}
return $factors;
}
A metodologia básica é a utilização de uma "peneira" para manter uma lista cada vez maior de números primos e utilizá-los até que o resto seja 1. Caso não sejam encontrados fatores até a raiz quadrada do número, presume-se que qualquer valor restante é primo.
O uso é bastante simples: basta passar um número, o valor de retorno é um array com as chaves sendo os fatores primos e os valores sendo os expoentes. Depois basta dar um echo e voilà:
$x = 210;
$fatores = primeFactors($x);
$fatoracaoPrima = "";
foreach ($fatores as $base=>$expoente){
if($fatoracaoPrima){$fatoracaoPrima.= " x ";}
$fatoracaoPrima .= "$base" . ($expoente>1?"$expoente":"");
}
echo $fatoracaoPrima;
Fórmula de Bhaskara em PHP
As equações quadráticas (ou de 2° grau) incompletas podem ser resolvidas facilmente apenas utilizando raiz quadrada. Já no caso das equações completas, é necessário utilizar uma fórmula matemática: a fórmula de Bhaskara.