Математические функции GMP
Функции работы с данными
🕛 01.11.2006, 13:14
Эти функции позволяют работать с целыми числами повышенной точности определенного формата, используя библиотеку 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, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.