我的 C++ 代码
long long N=1000000000000LL;
long long a = N;
mpz_class v;
mpz_mul(v, a, a);
cout<<v<<endl; //I want this to show 1000000000002000000000001
long long U=((sqrt(4*N+v)-1)/4); //not sure how to do this in GMP at all
cout << U << endl; //should show 250000000000
这是一个片段,显示了我想要执行的操作类型。但是我对 GMP 没有足够的经验来了解它,我也不清楚文档。我该如何纠正这一切?
最佳答案
mpz_class 有 no constructor from long long (它只能达到 unsigned long),所以你必须使用一个中间字符串:
#include <gmpxx.h>
#include <iostream>
#include <string>
int main()
{
long long N = 1000000000000LL;
mpz_class a(std::to_string(N).c_str());
mpz_class v = a*a;
std::cout << v << '\n'; // shows 1000000000000000000000000
std::cout << (a+1) * (a+1) << '\n'; // THIS shows 1000000000002000000000001
mpz_class U = ((sqrt(4*a+v)-1)/4);
std::cout << U << '\n'; // shows 250000000000
}
关于c++ - 如何正确使用 GMP 来执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577182/