Преобразование между mpz_t GMP и ZZ NTL

Я расширяю небольшую библиотеку, используя NTL и GMP. Я использую NTL для удобства (и для соответствия существующим API), но я переключусь на GMP (и MPFR) для действительно критически важных для производительности вещей.

Я использую GMP как длинный целочисленный бэкэнд для NTL (скомпилированный с использованием NTL_GMP_LIP=on флаг), и я надеюсь, что это означает, что я могу просто получить доступ к основному mpz_t из NTL::ZZ объект. Однако я не могу найти какую-либо документацию или примеры.

Если кто-то может дать мне небольшой фрагмент кода или объяснить, как конвертировать между NTL::ZZ а также mpz_t Буду вечно благодарен.

(Примечание: я знаю, что вы можете просто использовать строки в качестве промежуточного формата и конвертировать, используя разбор строк, но я бы хотел что-то более производительное.)

2

Решение

Вы можете использовать sstream или аналогичные строковые утилиты для преобразования наоборот.
Приведенный ниже код используется для перевода из NTL в ZZ. Обратное похоже.

   ZZ a, b;

cin >> a;
cin >> b;

mpz_t aa, bb;
mpz_init(aa);
mpz_init(bb);

std::stringstream ssa;
std::stringstream ssb;

ssa << a;
ssb << b;

mpz_set_str( aa, ssa.str().c_str(),10);
mpz_set_str( bb, ssb.str().c_str(),10);gmp_printf ("%Zd-", aa);
gmp_printf ("%Zd\n", bb);

cout << a  << "-" << b;
3

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

Других решений пока нет …

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