-4

我的程序中的所有变量都使用以下数据类型

typedef long long ll;

我安装了 GMP 并尝试这样做:

typedef mpz_class ll;

我试过了

typedef mpz_t ll;

但它不会编译,通常会出现大量“无效运算符”错误。有没有更简单的翻译方法?

示例错误:

ll a = sqrt(static_cast<double>(n/2));

__gmp_expr<__mpz_struct[1], __gmp_binary_expr<mpz_class, long int, __gmp_binary_divides> >' to type来自double类型的无效 static_cast '

另一个:

count-=myArr[m];

'myArr[m]' 中的 'operator[]' 不匹配

它也不会让我做

 mpz_t count;
 count = (x*x-1);

其中 x 是 long long

4

1 回答 1

2

首先,mpz_t 没有任何运算符重载,因为它是 C 结构,而不是 C++ 类。接下来, mpz_class的行为有点像整数,因为它有一些基本的运算符重载。但是,它绝对不能作为其他某种整数值的替代品。您将必须检查您的程序并通过将当前代码替换为下一个适用于 mpz_class 值的代码来修复所有错误。没有简单的方法可以做到这一点:您必须硬着头皮学习如何有效地使用 GMP。

或者,您可以尝试使用诸如 CLN 之类的东西或其他库,这些库试图更接近于 C++ 的大量替代品。据我所知,没有一个图书馆可以完全甚至很好地做到这一点。

于 2012-06-10T20:51:59.607 回答