PHP Функция Эйлера - с поиском НОД средствами GMP
Primary tabs
Куда более быстрый код с аналогичным результатом здесь.
Данное же решение таково:
/* $n - целое число в виде строки
так как в данной реализации функции Эйлера
мы будем использовать gmp, то это число может
быть сколь угодно большим*/
function Euler_gmp_function($n)
{
$rez = '0'; // число взаимно простых чисел
$i = gmp_init(1);
$fin = gmp_sub ($n, '1');
echo "<br> ".gmp_strval($fin)." <br>";
$one = gmp_init(1); // если использовать текстовую едницу - возможна утечка памяти
while (gmp_cmp($i, $fin) <= 0)
{
//echo "<br> ".gmp_strval($i)." <br>";
// $nod['g'] = '1';
$nod = gmp_gcdext($n,$i); // вычисляем НОД ($nod['g']) (и ещё пару значений)
if (gmp_cmp($nod['g'], $one) == 0) // вычисленный НОД и сравниваем с единицей
{
$rez = gmp_add($rez, '1'); // наращиваем счётчик
// echo "<br> zkzkzkkz <br>";
}
$i = gmp_add($i, '1');
}
/* мы потеряем в скорости рассчитывая
$rez в стиле gmp = но кто его знает -
какие числа будут у вас))))*/
echo '<br>Результат функции Эйлера = '.gmp_strval($rez);
return gmp_strval($rez); // возвращаем резульат в виде строки
}
- Log in to post comments
- 3363 reads