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

Математические функции 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, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.


    Содержание раздела