Использование BigInteger для суммы простых чисел в Java
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Класс BigInteger
в Java обеспечивает возможность работы с действительно большими числами, которые не умещаются в стандартные типы long
или int
. Для сложения двух таких чисел используется метод .add()
:
BigInteger big1 = new BigInteger("12345678901234567890");
BigInteger big2 = new BigInteger("98765432109876543210");
BigInteger result = big1.add(big2);
System.out.println("Результат: " + result);
Для проведения других математических операций, метод .add()
можно заменить на .multiply()
, .subtract()
или .divide()
.
Неизменяемость и выполнение операций с BigInteger
Объекты BigInteger
являются неизменяемыми. Это означает, что при выполнении арифметических операций оригинальный объект остается без изменений:
BigInteger sum = BigInteger.ZERO;
for (int i = 1; i <= 10; i++) {
sum = sum.add(BigInteger.valueOf(i));
}
Запомните, что после выполнения арифметической операции результат необходимо присвоить новой переменной, поскольку исходный объект BigInteger
сохраняет свое значение.
Преобразование примитивных целых чисел в BigInteger
Чтобы позволить выполнение арифметических операций между BigInteger
и примитивными типами, сперва следует преобразовать примитивный тип в BigInteger
:
int number = 5;
BigInteger bigNumber = BigInteger.valueOf(number);
Простые числа и BigInteger
В классе BigInteger
присутствует метод .isProbablePrime()
, который задействуется для проверки, является ли число простым с определенной степенью уверенности:
BigInteger possiblePrime = new BigInteger("12345678901234567890");
boolean isPrime = possiblePrime.isProbablePrime(10);
System.out.println("Простое ли число: " + isPrime);
Уровень вероятности корректности проверки можно регулировать изменением параметра достоверности.
Работа с крайне большими числами и BigInteger
Для проведения вычислений с чрезвычайно большими числами использование BigInteger
оптимально:
BigInteger largeNumber = new BigInteger("1234567890123456789012345678901234567890");
BigInteger sum = largeNumber.add(BigInteger.ONE);
Визуализация
Визуализируйте BigInteger
как безграничную линейку мер, которая может расширяться неограниченно.
Со стандартными типами: ||--- [INT_MAX] ---||
С BigInteger
: ||-----------------------... ...----------------------||
В Java BigInteger
позволяет манипулировать числами на этой бесконечной линейке:
BigInteger hugeNumber = new BigInteger("123456789012345678901234567890");
hugeNumber = hugeNumber.add(BigInteger.TEN);
hugeNumber = hugeNumber.multiply(BigInteger.valueOf(10));
Ваши числа всегда найдут место в Java, сколь бы велика была вся вселенная.
Обеспечение точности результата операций
Использование BigInteger
гарантирует математическую точность при вычислениях с чрезвычайно большими числами:
BigInteger factorial = BigInteger.ONE;
for (int i = 1; i <= 100; i++) {
factorial = factorial.multiply(BigInteger.valueOf(i));
}
Обработка граничных ситуаций с BigInteger
BigInteger
сгенерирует ArithmeticException
в случае появления отрицательного числа или попытки деления на ноль:
try {
BigInteger inverse = BigInteger.ONE.divide(BigInteger.ZERO);
} catch (ArithmeticException e) {
System.out.println("Недопустимо делить на ноль!");
}
Оптимизация производительности BigInteger
Для оптимизации производительности и сохранения памяти следует минимизировать преобразование BigInteger
в примитивные типы:
BigInteger a = new BigInteger("100000000000000000000");
BigInteger b = new BigInteger("200000000000000000000");
BigInteger c = a.multiply(b);
Полезные материалы
- BigInteger (Java Platform SE 8) — официальная документация Java по использованию
BigInteger
. - Класс Java.math.BigInteger — полное руководство по работе с классом
BigInteger
. - Тема класса BigInteger в Java – GeeksforGeeks — учебники и примеры использования
BigInteger
. - Вопросы тега 'biginteger' – Stack Overflow — обскуссии и решения типичных проблем с
BigInteger
. - Больше об использовании... — обучающие материалы от Baeldung с примерами кода.
- Учебник | DigitalOcean — подробный учебник по работе с
BigInteger
от DigitalOcean.