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

21 Авг 2019 в 06:12
139 +1
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 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир