C ++ MPIR: поиск примера использования mpz_sizeinbase ();

Это первый раз, когда я использую библиотеку MPIR. Я должен сделать некоторые расчеты на Bigintegers. На самом деле эти числа могут иметь максимум 2048 бит. Первая задача, которую я должен реализовать, — найти общее количество бит в десятичном значении. Это требует использования логарифма.

В библиотеке MPIR я обнаружил, что это простая функция, которая дает общее количество цифр в данной базе, альтернатива нахождению логарифма, который недоступен в MPIR:

size_t mpz_sizeinbase (mpz t op, int base)

Возвращает размер операции, измеренный в количестве цифр в заданной базе.
база может отличаться от 2
до 36. Знак операции игнорируется, используется только абсолютное значение. Результат будет либо
точный или 1 слишком большой. Если основание является степенью 2, результат всегда точен. Если op равен нулю, возврат
значение всегда 1.
Эта функция может быть использована для определения места, необходимого при преобразовании op в строку.
правильное количество выделения обычно на два больше, чем значение, возвращаемое mpz_sizeinbase,
один дополнительный для знака минус и один для нулевого терминатора.
Следует отметить, что mpz_sizeinbase (op, 2) может использоваться для определения наиболее значимого 1 бита.
в операторе, считая от 1. (В отличие от побитовых функций, которые начинаются с 0, см. раздел

Я пытаюсь использовать эту функцию в моей программе следующим образом:

#include < cstdio>
#include < stdlib.h>
#include < gmpxx.h>
#include < iostream>
#include <mpirxx.h>
#include <math.h>
#include <windows.h>
void main()
{
mpz_t opt;
size_t nob;
opt=200;
nob= mpz_sizeinbase(opt, 10);
cout << nob<<"\n";}

Ответ должен быть 3.

Но я получаю следующую ошибку во время компиляции:

Ошибка 13, ошибка C2440: ‘=’: невозможно преобразовать из ‘int’ в
‘mpz_t’ logicoperations.cpp 27 1 логические операции

Ошибка 14 Ошибка C2664: «__gmpz_sizeinbase»: невозможно преобразовать параметр 1
от int до
‘mpz_srcptr’ logicoperations.cpp 28 1 логические операции
**

Это только для тестирования, в моем реальном коде у меня будут такие значения:

mpz_t opt= 111111111111111111111111111111111111111111111111999999999999999999999999999999999999999999999999999999999999999999999999999999999999999;

Можете ли вы дать несколько советов, как правильно использовать параметры этой функции?

Пример будет достаточно.

-2

Решение

Ну, я смог решить это сам. Это может потребоваться кому-то в будущем, поэтому я публикую это здесь.

int main()
{
mpz_t a, b ;
size_t nob;
mpz_init (a); mpz_init (b);  //initialization
mpz_set_str (b, "61754454545545454545454", 10); //large things work in strings in this world
nob = mpz_sizeinbase(b, 2); //find how many bits are there in the binary
cout<<nob<<"\n";
return 0;

}

Теперь я понял!

Если кто-то может улучшить его дальше, это будет очень полезно

1

Другие решения


По вопросам рекламы [email protected]