Учебник по основам PHP




Математические функции GMP


Эти функции позволяют работать с целыми числами повышенной точности определенного формата, используя библиотеку GNU MP. Для использования их в РЫР необходимо перекомпилировать его с ключом — with-gmp.

Коды библиотеки и документацию можно загрузить с сайта http:// www.swox.com/gmp/. Требуется версия 2 или выше.

Эти функции (их большинство) могут также работать с обычными целочисленными и строковыми (содержащими целые числа) аргументами, которые автоматически преобразуются в формат GMP. Но наивысшая производительность все же достигается при непосредственном использовании чисел формата GMP; см. также gmp_init().

<'php function fact ($x) { // функция вычисления факториала if ($x <= 1) // (достаточно быстро вычисляет return 1; // факториалы до 1000) else return gmpjnul ($x. Tact ($x-D); } print gmp_strval (fact (1000)) "\n": ?>

Значения чисел GMP

gmpjnit

Создание числа GMP

resource gmp_init (mixed number)

Число GMP создается из целочисленного или строкового аргумента. В строке число может быть указано в десятичном или шестнадцате-ричном (тогда оно должно иметь префикс Ох) формате.

$а - gmp init (123456); $b - grapjrvtt ("OxFFFFDEBACDFEDF7200");

Заметьте, не всегда необходимо явно вызывать эту функцию, если нужно использовать в функциях GMP (например, gmp_add()) обычные числа или строки вместо чисел GMP. Аргументы функций GMP автоматически конвертируются при необходимости (и возможности) с использованием тех же правил, что и для функции gmp_init().

gmp_intval

Конвертация числа GMP в целое

int gmp_intval(resource gmpnumber)

Возвращает целое число, если оно не превышает его максимально возможную размерность (тип знакового длинного (32 бита) — signed long type). Если необходимо всего лишь распечатать значение, используйте gmp_strval().

gmp_strval

Конвертация числа GMP в строку

string gmp_strval (resource gmpnumber [, int base])

Возвращает строковое представление числа GMP в системе счисления base (по умолчанию, в десятичной). Возможные системы счисления — от 2 до 36.

gmp_ abs

Получение абсолютного значения числа

resource gmp_abs (resource a)

Возвращает абсолютное (то есть неотрицательное) значение числа.

gmp_sign

Получение знака числа

int gmp_sign (resource a)

Возвращает 1, если число положительное, или -1, если число отрицательное.

gmp_neg

Получение отрицательного значения числа

resource gmp_neg (resource a) Возвращает (-а).

Арифметика

gmp_add

Сложение

resource gmp_add (resource a, resource b)

Возвращает GMP число - сумму аргументов а и b.

gmp_sub

Вычитание

resource gmp_sub (resource a, resource b)

Возвращает GMP число - разность (a-b).

gmp_mul

Умножение

resource gmp_mul (resource a. resource b)

Возвращает GMP число - произведение аргументов а и b.

gmp_div

Синоним функции gmp_div_q

resource gmp_div (resource a, resource b [, int round])

gmp _div_q

Деление

resource gmp_div_q (resource a, resource b)

Возвращает результат деления а на b. Результат округляется в зависимости от указанного аргумента:

  • GMP_ROUND_ZERO - цифры после точки отбрасываются;
  • GMP_ROUND_PLUSINF - результат округляется в большую сторону;
  • GMP_ROUND_MINUSINF - результат округляется в меньшую сторону.

Имеется синоним функции - gmp_div().

См. также: gmp_div_r(), gmp_div_qr().

gmp_div_r

Получение остатка целочисленного деления

resource gn,p_div_r (resource n, resource d [. int round])

Функция сходна с gmp_div_q(). Остаток будет иметь знак аргумента n.

См. также: gmp_div_q(), gmp_div_qr().

gmp_div_qr

Деление с остатком

array gmp_div_qr (resource n, resource d [, int round])

Функция комбинирует действие функций gmp_div_q() и gmp_div_r() и возвращает массив, в котором элемент [0] — целое частное, а [1] - остаток.

$а = gmpjimt ("Ox41682I79fbf5"). $res = gmp_chv_qr ($a. "OxDEFE75"); pnntf( "Результат: частное» *s. остаток= %s". gmp_strval ($res[0]). gmp_strval ($res[l])):

См. также: gmp_div_q(), gmp_div_r().

gmp_mod

Получение абсолютного остатка деления

resource gmpjnod (resource n, resource d)

Функция эквивалентна gmp_div_r(), знак результата которой отбрасывается.

gmp_ divexact

Безостаточное деление

resource gmp_divexact (resource n, resource d)

Так как функция использует алгоритм «точного» деления, результат будет достоверным, только если заранее известно, что d нацело делит n.

gmp_cmp

Сравнение

int gmp_cmp (resource a, resource b)

Возвращает положительное значение, если а > b; ноль, если а = b; и отрицательное значение, если а < b.

Математика

gmp_fact

Вычисление факториала

resource gmp_fact (int a)

gmp_sqrt

Вычисление квадратного корня

resource gmp_sqrt (resource a)

gmp_sqrtrm

Вычисление квадратного корня с остатком

array gmp_sqrtrm (resource a)

Возвращает массив, в котором элемент [0] — целый квадратный корень аргумента (который также возвращается функцией gmp_sqrt()), а элемент [1] — разность между аргументом и элементом [0] в квадрате.

gmp_perfect_square

Определение, является ли число полным квадратом

bool gmp_perfect_squar~e (resource a)

Возвращает TRUE, если а является квадратом целого числа, иначе, FALSE.

См. также: gmp_sqrt(), gmp_sqrtrm().

gmp_pow

Возведение числа в степень

resource gmp_pow (resource base, int exp)

Возвращает результат возведения основания base в степень exp. Для аргументов (0,0) возвращается 1. ехр не должен быть отрицательным.

gmp_powm

Получение остатка деления степени числа

resource gmp_powm (resource base, resource exp, resource mod)

Возвращает результат: остаток от деления (основание base, возведенное в степень ехр) на mod. При отрицательном ехр результат не определен.

gmp_prob_prime

Проверка «вероятно» простого числа

int gmp_prob_pnme (resource a [, Int reps])

Функция возвращает 0, если а сложное число (имеющее более двух целых делителей). Если возвращается 1, то а, возможно, простое число. Если возвращается 2, то тогда а, без сомнения, простое число. Возможные значения аргумента reps: от 5 до 10 (по умолчанию 10) определяют качество проверки (чем больше это число, тем выше достоверность результата, то есть непринятия сложного числа за вероятно-простое).

Функция использует алгоритм вероятностного теста Мпллера-Рабина (Miller-Rabin).

gmp_ gcd

Нахождение наибольшего общего делителя

resource gmp_gcd (resource a, resource b) Возвращает всегда положительный результат.

gmp_ gcdext

Нахождение наибольшего общего делителя со множителями

array gmp_gcdext (resource a, resource b)

Возвращает в массиве значения g, s, t, такие, что a*s + b*t = g = НОД(а.b), где НОД — наибольший общий делитель.

gmp_invert

Инверсия по модулю

resource gmp_invert (resource a, resource b)

Возвращает дополнение а до значения, делящегося нацело на b. Возвращает FALSE, если результат не может быть найден.

gmp_ legendre

Получение числа Лежандра

int gmpjegendre (resource a, resource p)

Возвращает число Лежандра (Legendre symbol), р должно быть четным положительным.

gmp_jacobi

Получение числа Якоби

int gmpjacobi (resource a, resource p)

Возвращает число Якоби (Jacob! symbol), p должно быть четным положительным.

gmp_random

Генерация случайного числа

resource grap_random (int limiter)

limiter указывает длину генерируемого числа (если значение отрицательное, генерируется отрицательное число).

gmp_popcount

Получение популяции

int gmp_popcount (resource a)

Возвращает числитель популяции.

gmp_ hamdist

Вычисление дистанции

int gmp_hamdist (resource a, resource b)

Возвращает дистанцию (hamming) между а и b. Оба аргумента должны быть неотрицательными.

Бинарные операции

gmp_ and

Логическое И (AND)

resource gmp_and (resource a, resource b)

gmp_or

Логическое ИЛИ (OR)

resource gmp_or (resource a, resource Из)

gmp_xor

Логическое исключающее ИЛИ (XOR) resource gmp_xor (resource a. resource b)

gmp_setbit

Установка бита

resource gmp_setbit (resource &a, int index [, bool set_clear])

Устанавливает бит в позиции index в числе а. Аргумент set_clear указывает, в какое значение устанавливать бит: 0 или 1 (по умолчанию, в 1).

gmp_ clrbit

Сброс бита

resource gmp_c!rbit (resource &a, int index) Устанавливает бит в позиции index в числе а в значение 0.

gmp_scan0

Поиск бита 0

Oint grap_scanO (resource a, int start)

Ищет в числе а бит 0, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.

gmp_scan1

Поиск бита 1

lint gmp_scanl (resource a, int start)

Ищет в числе а бит 1, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.









Начало    Назад    Вперед