我程序中的所有变量都使用以下数据类型
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'
count-=myArr[m];
'myArr [m]'
中的'operator []'不匹配它也不会让我这样做
mpz_t count;
count = (x*x-1);
其中x是长的长
答案 0 :(得分:2)
首先,mpz_t没有任何运算符重载,因为它是C结构,而不是C ++类。接下来,mpz_class表示排序就像一个整数,因为它有一些基本的运算符重载。但是,绝对不会作为其他类型的整数值的替代品。您必须完成程序并通过将当前代码替换为可用于mpz_class值的下一代码来修复所有错误。没有简单的方法可以做到这一点:你必须咬紧牙关,学习如何有效地使用GMP。
或者,你可以尝试使用类似CLN或其他库的东西,试图更接近C ++的大量替代品。没有我知道的图书馆完全甚至非常好。