gmp_gcdext

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gmp_gcdextCalcula MDC e multiplicadores

Descrição

gmp_gcdext(GMP|int|string $num1, GMP|int|string $num2): array

Calcula g, s, e t, de forma que a*s + b*t = g = gcd(a,b), onde gcd é o máximo divisor comum (MDC). Retorna um array com os respectivos elementos g, s e t.

Esta função pode ser usada para resolver equações lineares de Diophantine com duas variáveis. São equações que permitem somente soluções com inteiros e têm a forma: a*x + b*y = c. Para mais informações, acesse a página » "Equação de Diophantine" (em inglês) na MathWorld.

Parâmetros

num1

Um objeto GMP, um int ou uma string numérica.

num2

Um objeto GMP, um int ou uma string numérica.

Valor Retornado

Um array de números GMP.

Exemplos

Example #1 Resolvendo uma equação linear de Diophantine

<?php
// Soluciona a equação a*s + b*t = g
// onde a = 12, b = 21, g = MDC(12, 21) = 3
$a = gmp_init(12);
$b = gmp_init(21);
$g = gmp_gcd($a, $b);
$r = gmp_gcdext($a, $b);

$check_gcd = (gmp_strval($g) == gmp_strval($r['g']));
$eq_res = gmp_add(gmp_mul($a, $r['s']), gmp_mul($b, $r['t']));
$check_res = (gmp_strval($g) == gmp_strval($eq_res));

if ($check_gcd && $check_res) {
    $fmt = "Solução: %d*%d + %d*%d = %d\n";
    printf($fmt, gmp_strval($a), gmp_strval($r['s']), gmp_strval($b),
    gmp_strval($r['t']), gmp_strval($r['g']));
} else {
    echo "Erro ao solucionar a equação\n";
}

// saída: Solução: 12*2 + 21*-1 = 3
?>