Runnable: execute códigos online!

Imagine a situação: você precisa testar um código em determinada linguagem e não possui ela instalada na máquina. Você tem duas opções: ou baixa e instala a linguagem, o que pode não ser muito conveniente dependendo do tamanho do código, o que nos leva à segunda opção: usar um interpretador online. É exatamente isso que o Runnable faz.

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.

Verificando se um número é um quadrado perfeito

O PHP traz "de fábrica" várias funções matemáticas que podemos usar, mas, dependendo do nosso objetivo, precisaremos de algumas funções que o PHP não possui: verificar se um número é um quadrado perfeito é uma delas. A função a seguir permite que verifiquemos isso: