在GMP的mpz_t和NTL的ZZ之间转换

时间:2014-02-01 02:56:55

标签: c++ gmp ntl

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

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

如果有人可以给我一个小代码段或解释如何在NTL::ZZNTL::ZZ之间进行转换,我将永远感激不尽。

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

1 个答案:

答案 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;