我正在使用NTL和GMP扩展一个小型库。我使用NTL是为了方便(并且符合现有的API),但是我将切换到GMP(和MPFR)以获得真正的性能关键的东西。
我正在使用GMP作为NTL的长整数后端(使用NTL_GMP_LIP=on
标志编译),我希望这意味着我只能从{{1}访问基础mpz_t
对象。但是,我找不到任何文档或示例。
如果有人可以给我一个小代码段或解释如何在NTL::ZZ
和NTL::ZZ
之间进行转换,我将永远感激不尽。
(注意:我知道你可以使用字符串作为中间格式并使用字符串解析进行转换,但我想要更高效的字符。)
答案 0 :(得分:3)
您可以使用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;