Я расширяю небольшую библиотеку, используя NTL и GMP. Я использую NTL для удобства (и для соответствия существующим API), но я переключусь на GMP (и MPFR) для действительно критически важных для производительности вещей.
Я использую GMP как длинный целочисленный бэкэнд для NTL (скомпилированный с использованием NTL_GMP_LIP=on
флаг), и я надеюсь, что это означает, что я могу просто получить доступ к основному mpz_t
из NTL::ZZ
объект. Однако я не могу найти какую-либо документацию или примеры.
Если кто-то может дать мне небольшой фрагмент кода или объяснить, как конвертировать между NTL::ZZ
а также mpz_t
Буду вечно благодарен.
(Примечание: я знаю, что вы можете просто использовать строки в качестве промежуточного формата и конвертировать, используя разбор строк, но я бы хотел что-то более производительное.)
Вы можете использовать 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;
Других решений пока нет …