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
- 2754 reads