Рубрики

Класс BigInteger на Java

Класс BigInteger используется для математической операции, которая включает в себя очень большие целочисленные вычисления, выходящие за пределы всех доступных примитивных типов данных.

Например, факториал 100 содержит 158 цифр, поэтому мы не можем сохранить его в любом доступном примитивном типе данных. Мы можем хранить в нем столько целых чисел, сколько захотим. Нет теоретического ограничения на верхнюю границу диапазона, потому что память распределяется динамически, но практически, поскольку память ограничена, вы можете хранить число, в котором содержится число бит Integer.MAX_VALUE, которого должно быть достаточно для хранения в основном всех больших значений.

Ниже приведен пример Java-программы, которая использует BigInteger для вычисления Factorial.

// Java-программа для поиска больших факториалов с использованием BigInteger
import java.math.BigInteger;
import java.util.Scanner;

  

public class Example

{

    // Возвращает Факториал Н

    static BigInteger factorial(int N)

    {

        // Инициализировать результат

        BigInteger f = new BigInteger("1"); // Или BigInteger.ONE

  

        // Умножаем f на 2, 3, ... N

        for (int i = 2; i <= N; i++)

            f = f.multiply(BigInteger.valueOf(i));

  

        return f;

    }

  

    // Метод драйвера

    public static void main(String args[]) throws Exception

    {

        int N = 20;

        System.out.println(factorial(N));

    }

}

Выход:

2432902008176640000

Если нам нужно написать вышеуказанную программу на C ++, это было бы слишком большим и сложным, мы можем взглянуть на Factorial of Large Number .
Таким образом, класс BigInteger очень удобен в использовании из-за его большой библиотеки методов, и он также широко используется в конкурентном программировании.

Ниже приведен список простых утверждений в примитивной арифметике и аналогичных им выражений в терминах объектов BigInteger.

декларация

int a, b;                
BigInteger A, B; 

Инициализация:

 
a = 54;
b = 23;
A  = BigInteger.valueOf(54);
B  = BigInteger.valueOf(37); 

И для целых чисел, доступных как строка, вы можете инициализировать их как:

A  = new BigInteger(“54”);
B  = new BigInteger(“123456789123456789”); 

Некоторые константы также определены в классе BigInteger для простоты инициализации:

A = BigInteger.ONE;
// Other than this, available constant are BigInteger.ZERO 
// and BigInteger.TEN 

Математические операции:

int c = a + b;
BigInteger C = A.add(B); 

Другими подобными функциями являются subtract (), multiply (), div (), remainder ()
Но все эти функции принимают BigInteger в качестве аргумента, поэтому, если мы хотим, чтобы эти операции с целыми числами или строки преобразовывали их в BigInteger, прежде чем передавать их в функции, как показано ниже:

String str = “123456789”;
BigInteger C = A.add(new BigInteger(str));
int val  = 123456789;
BigInteger C = A.add(BigInteger.valueOf(val)); 

Извлечение значения из BigInteger:

int x   =  A.intValue();   // value should be in limit of int x
long y   = A.longValue();  // value should be in limit of long y
String z = A.toString();  


Сравнение:

if (a < b) {}         // For primitive int
if (A.compareTo(B) < 0)  {} // For BigInteger 

На самом деле CompareTo возвращает -1 (меньше), 0 (равно), 1 (больше) в соответствии со значениями.

Для равенства мы также можем использовать:

if (A.equals(B)) {}  // A is equal to B 

Методы класса BigInteger:

  1. BigInteger abs () : этот метод возвращает BigInteger, значение которого является абсолютным значением этого BigInteger.
  2. BigInteger add (BigInteger val) : этот метод возвращает BigInteger со значением (this + val).
  3. BigInteger и (BigInteger val) : этот метод возвращает BigInteger со значением (this & val).
  4. BigInteger andNot (BigInteger val) : этот метод возвращает BigInteger, значение которого (this & ~ val).
  5. int bitCount () : Этот метод возвращает количество бит в двоичном представлении этого BigInteger, которое отличается от его знакового бита.
  6. int bitLength () : Этот метод возвращает число бит в минимальном представлении этого дополнения BigInteger с двумя дополнениями, исключая знаковый бит.
  7. byte byteValueExact () : Этот метод преобразует этот BigInteger в байт, проверяя потерянную информацию.
  8. BigInteger clearBit (int n) : этот метод возвращает BigInteger, значение которого эквивалентно этому BigInteger с очищенным назначенным битом.
  9. int compareTo (BigInteger val) : этот метод сравнивает этот BigInteger с указанным BigInteger.
  10. Разделение BigInteger (BigInteger val) : этот метод возвращает BigInteger, значение которого (this / val).
  11. BigInteger [] divAndRemainder (BigInteger val) : этот метод возвращает массив из двух BigInteger, содержащих (this / val), за которым следует (this% val).
  12. double doubleValue () : Этот метод преобразует этот BigInteger в double.
  13. boolean equals (Object x) : Этот метод сравнивает этот BigInteger с указанным объектом на равенство.
  14. BigInteger flipBit (int n) : этот метод возвращает BigInteger, значение которого эквивалентно этому BigInteger с переключенным назначенным битом.
  15. float floatValue () : этот метод преобразует этот BigInteger в число с плавающей точкой.
  16. BigInteger gcd (BigInteger val) : этот метод возвращает BigInteger, значение которого является наибольшим общим делителем abs (this) и abs (val).
  17. int getLowestSetBit () : Этот метод возвращает индекс самого правого (самого младшего) одного бита в этом BigInteger (число нулевых бит справа от самого правого одного бита).
  18. int hashCode () : этот метод возвращает хеш-код для этого BigInteger.
  19. int intValue () : Этот метод преобразует этот BigInteger в int.
  20. int intValueExact () : Этот метод преобразует этот BigInteger в int, проверяя потерянную информацию.
  21. boolean isProbablePrime (int уверенность) : этот метод возвращает true, если этот BigInteger, вероятно, является простым, false, если он определенно составной.
  22. long longValue () : Этот метод преобразует этот BigInteger в long.
  23. long longValueExact () : Этот метод преобразует этот BigInteger в long, проверяя потерянную информацию.
  24. BigInteger max (BigInteger val) : этот метод возвращает максимум этого BigInteger и val.
  25. BigInteger min (BigInteger val ) : этот метод возвращает минимум этого BigInteger и val.
  26. Мод BigInteger (BigInteger m) : этот метод возвращает BigInteger, значение которого (этот мод m).
  27. BigInteger modInverse (BigInteger m) : этот метод возвращает BigInteger, значение которого (this-1 mod m).
  28. BigInteger modPow (показатель BigInteger, BigInteger m) : этот метод возвращает значение BigInteger, значение которого (thisexponent mod m).
  29. BigInteger multiply (BigInteger val) : этот метод возвращает BigInteger, значение которого (this * val).
  30. BigInteger negate () : этот метод возвращает BigInteger со значением (-this).
  31. BigInteger nextProbablePrime () : этот метод возвращает первое целое число, большее, чем этот BigInteger, который, вероятно, является простым.
  32. BigInteger not () : этот метод возвращает BigInteger со значением (~ this).
  33. BigInteger или (BigInteger val) : этот метод возвращает BigInteger со значением (this | val).
  34. BigInteger pow (int exponent) : этот метод возвращает BigInteger, значение которого (thisexponent).
  35. s tatic BigInteger probablePrime (int bitLength, Random rnd) : этот метод возвращает положительный BigInteger, который, вероятно, является простым, с указанным bitLength.
  36. BigInteger remainder (BigInteger val) : этот метод возвращает BigInteger, значение которого (это% val).
  37. BigInteger setBit (int n) : этот метод возвращает BigInteger, значение которого эквивалентно этому BigInteger с установленным назначенным битом.
  38. BigInteger shiftLeft (int n) : этот метод возвращает BigInteger, значение которого (это << n).
  39. BigInteger shiftRight (int n) : этот метод возвращает BigInteger, значение которого (this >> n).
  40. short shortValueExact () : Этот метод преобразует этот BigInteger в short, проверяя потерянную информацию.
  41. int signum () : этот метод возвращает функцию signum этого BigInteger.
  42. BigInteger sqrt () : этот метод возвращает целочисленный квадратный корень этого BigInteger.
  43. BigInteger [] sqrtAndRemainder () : этот метод возвращает массив из двух BigInteger, содержащий целочисленный квадратный корень s из этого и его остаток this — s * s, соответственно.
  44. BigInteger subtract (BigInteger val) : этот метод возвращает BigInteger, значение которого (this — val).
  45. boolean testBit (int n) : этот метод возвращает true, если и только если установлен назначенный бит.
  46. byte [] toByteArray () : Этот метод возвращает байтовый массив, содержащий представление двоичного дополнения этого BigInteger.
  47. String toString () : этот метод возвращает десятичное строковое представление этого BigInteger.
  48. String toString (int radix) : этот метод возвращает строковое представление этого BigInteger в заданном основании.
  49. static BigInteger valueOf (long val) : этот метод возвращает BigInteger, значение которого равно значению указанного long.
  50. BigInteger xor (BigInteger val) : этот метод возвращает BigInteger, значение которого (this ^ val).

Статьи по Теме:
Большие числа Фибоначчи на Яве
Класс BigInteger также предоставляет быстрые методы для простых чисел .

SPOJ Проблемы:
Таким образом, после вышеупомянутого знания функции класса BigInteger, мы можем легко решить многие сложные проблемы, но помните, что класс BigInteger для обработки внутренне использует массив целых чисел, операция над объектом BigIntegers выполняется не так быстро, как над примитивами, что является функцией добавления в BigIntgers. не требует постоянного времени, это занимает время, пропорциональное длине BigInteger, поэтому сложность программы будет меняться соответственно. Ниже приведены проблемы SPOJ, чтобы понять BigIntegers.

http://www.spoj.com/problems/JULKA/
http://www.spoj.com/problems/MCONVERT/en/
http://www.spoj.com/problems/MUL2COM/en/
http://www.spoj.com/problems/REC/
http://www.spoj.com/problems/SETNJA/en/
http://www.spoj.com/problems/TREE/
http://www.spoj.com/problems/WORMS/

Дополнительные функции и подробности см. По адресу http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html.

Эта статья предоставлена Уткаршем Триведи. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Класс BigInteger на Java

0.00 (0%) 0 votes