我正在使用NTL和GMP扩展一个小型库。为了方便起见,我使用NTL(并与现有的API兼容),但是对于性能至关重要的东西,我将改用GMP(和MPFR)。

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

如果有人可以给我一个小的代码段或解释如何在NTL::ZZmpz_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/

10-13 06:54