我正在使用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;
关于c++ - 在GMP的mpz_t和NTL的ZZ之间转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21493598/