转换GMP的mpz_t和NTL的ZZ之间的格式

3

我正在使用NTL和GMP扩展一个小型库。我使用NTL是为了方便(并符合现有API),但我将切换到GMP(和MPFR)以进行真正的性能关键操作。

我正在使用GMP作为NTL的长整数后端(使用NTL_GMP_LIP=on标志编译),我希望这意味着我可以从NTL::ZZ对象中访问底层的mpz_t。然而,我找不到任何文档或示例。

如果有人能给我一个小的代码片段或解释如何在NTL::ZZmpz_t之间转换,我将不胜感激。

(注意:我知道您可以只使用字符串作为中间格式,并使用字符串解析进行转换,但我想要更高效的方法。)


据我所知,NTL不使用mpz_t(如果定义了NTL_GMP_HACK,则使用临时的mpz_t),它只使用GMP的MPN层。您应该下载NTL的源代码并查看src/g_lip_impl.h以了解其外观。 - Marc Glisse
啊,好的。谢谢你的提示。 - pg1989
1个回答

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接