Реализована (фактически переписана на php+gmp) как копия этого алгоритма:
function Euler_quick_gmp_function($n)
{
$result = gmp_init($n);
$n = gmp_init($n);
$i = gmp_init('2'); // начальное значение
$zero = gmp_init('0'); // просто ноль
$one = gmp_init('1'); // просто единица
while (gmp_cmp(gmp_mul($i,$i),$n) <= 0)
{
if (gmp_cmp(gmp_div_r($n, $i), $zero) == 0) {
while (gmp_cmp(gmp_div_r($n, $i), $zero)== 0) {
$n = gmp_div_q($n, $i);
}
$result = gmp_sub($result, gmp_div_q($result, $i));
}
$i = gmp_add($i,'1');
}
if (gmp_cmp($n, $one) > 0)
$result = gmp_sub($result, gmp_div_q($result, $n));
echo '<br>Результат "быстрой" функции Эйлера = '.gmp_strval($result);
return gmp_strval($result);
}