Как производить математические операции с большими числами? Создал алгоритм для определения числа на простоту.
Написал программу на C++, которая из диапазона 1 ... 2^64 - 1 максимально большое простое число 18446744073709551557 проверяет за 7-8 секунд.
Теперь хотелось бы работать с числами произвольной длины, но не знаю как.
В общем нужно производить три операции с большими числами: вычисление квадратного корня числа (sqrt), округление числа к ближайшему целому (ceil) и деление по модулю (остаток от деления, %).
Подскажите, как можно организовать эти три операции над сверхбольшим числом в C++.

21 Авг 2019 в 06:12
119 +2
1
Ответы
1

Для работы с большими числами в C++ можно использовать библиотеку GMP (GNU Multiple Precision Arithmetic Library) или Boost.Multiprecision. Эти библиотеки предоставляют удобные средства для работы с числами произвольной длины.

Для вычисления квадратного корня числа можно воспользоваться функцией sqrt из соответствующей библиотеки. Например, для GMP это будет функция sqrt, а для Boost.Multiprecision - sqrt.

Для округления числа к ближайшему целому можно воспользоваться функцией round из стандартной библиотеки C++ или использовать аналогичную функцию из библиотеки для работы с большими числами.

Для вычисления остатка от деления можно использовать оператор % как обычно, применяя его к объектам большого числа из соответствующей библиотеки.

Пример работы с большими числами в C++ с использованием библиотеки GMP:

#include <gmpxx.h>
#include <iostream>
int main() {
mpz_class a("1234567890123456789012345678901234567890");
mpz_class sqrt_a = sqrt(a);
mpz_class rounded_a = (a + 1) / 2; // округление к ближайшему целому
mpz_class mod_a = a % 1000; // остаток от деления на 1000
std::cout << "Square root of a: " << sqrt_a << std::endl;
std::cout << "Rounded a: " << rounded_a << std::endl;
std::cout << "Modulus of a: " << mod_a << std::endl;
return 0;
}

Данный пример показывает, как можно производить операции с большими числами при использовании библиотеки GMP. Для работы с Boost.Multiprecision достаточно подключить соответствующий заголовочный файл и использовать тип данных boost::multiprecision::cpp_int для переменных.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 047 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир