PHP Функция Эйлера для очень больших чисел - пример кода (реализация)

Для нахождения значения функции Эйлера- дабы не ограничиваться разрядностью, будем использовать php gmp

Я приведу здесь две реализации, первая из которых "формальна" (понятнее но работает медленно), а вторая работает значительно быстрее:

PHP - Алгоритм Евклида для НОД - пример кода

	// функция поиска наибольшего общего делителя (php)
	// используем метод взаимного вычитания
	function NOD($a, $b)
	{
		while ($a != $b)
		{
			if ($a > $b) $a =  $a - $b;
			else $b = $b - $a;
		}
		return $b;
	}

PHP Функция Эйлера - реализация с факторизацией - пример кода

Реализована (фактически переписана на 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);
					}

Работа с очень большими числами на Pyton

Работа с очень большими числами на Pyton - читайте здесь = http://sib.ktu10.com/node/5563

C# функция Эйлера - пример реализации - код

пример таков:

//функция Эйлера
        ulong Eyler(ulong n) 
        {
            ulong res = n, en = Convert.ToUInt64(Math.Sqrt(n) + 1);
            for (ulong i = 2; i <= en; i++)
                if ((n % i) == 0)
                {
                    while ((n % i) == 0)
                        n /= i;
                    res -= (res / i);
                }
            if (n > 1) res -= (res / n);
            return res;
        }

что такое факторизация числа

факторизация натурального числа - это его разложение на простые множители.

php gmp - переполнение памяти - утечка памяти

очень даже наблюдается в моём случае при попытке написать функцию Эйлера с использованием GMP......

РЕШЕНИЕ

утечка памяти (как сказала этот добрый человек) наблюдается в функции
сравнения двух чисел gmp_cmp, если одно из них -строка, а не gmp число

Поэтому чтобы избежать утечки надо писать , например:

правила комментирования кода php

формат примерно таков (PHPDoc):

/**
 * Set the default fetch mode for this statement
 * @param mixed $mode fetch mode
 * @return CDbCommand
 * @see http://www.php.net/manual/en/function.PD...
 * @since 1.1.7
 */
public function setFetchMode($mode)
{
    $params=func_get_args();
    $this->_fetchMode = $params;
    return $this;
}

Pages

Subscribe to fkn+antitotal RSS