public static function extendedGCD(int $a, int $b) : array
{
// Base cases
if ($a == 0) {
return [$b, 0, 1];
}
if ($b == 0) {
return [$a, 1, 0];
}
$x₂ = 1;
$x₁ = 0;
$y₂ = 0;
$y₁ = 1;
while ($b > 0) {
$q = intdiv($a, $b);
$r = $a % $b;
$x = $x₂ - $q * $x₁;
$y = $y₂ - $q * $y₁;
$x₂ = $x₁;
$x₁ = $x;
$y₂ = $y₁;
$y₁ = $y;
$a = $b;
$b = $r;
}
return [$a, $x₂, $y₂];
}