2

我正在使用 NTL 和 GMP 扩展一个小型库。我使用 NTL 是为了方便(并符合现有的 API),但我将切换到 GMP(和 MPFR)以获得真正对性能至关重要的东西。

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

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

(注意:我知道您可以将字符串用作中间格式并使用字符串解析进行转换,但我想要性能更高的东西。)

4

1 回答 1

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;
于 2016-04-25T19:11:07.507 回答