是否有一个c++;gmp库函数与python gmpy2库divm(…)函数的功能相同? 正如标题所说,我试图在C++ GMP库中找到一个函数,它与GMPY2 Python库的DIVM(…)函数做的事情相同。 我无法想象GMPY2有这个方法,GMP C++库没有任何东西可以做同样的计算。
如果这不存在,我将感谢任何关于从头开始使用divm函数的建议(仍然必须使用gmp,因为我通过mpz_类处理的值大于标准整数)是否有一个c++;gmp库函数与python gmpy2库divm(…)函数的功能相同? 正如标题所说,我试图在C++ GMP库中找到一个函数,它与GMPY2 Python库的DIVM(…)函数做的事情相同。 我无法想象GMPY2有这个方法,GMP C++库没有任何东西可以做同样的计算。,python,c++,gmp,gmpy,Python,C++,Gmp,Gmpy,如果这不存在,我将感谢任何关于从头开始使用divm函数的建议(仍然必须使用gmp,因为我通过mpz_类处理的值大于标准整数) 谢谢 该函数的C源代码可以在GMPy\u MPZ\u function\u Divm中找到。正如您所看到的,它实际上不是到底层C代码的一对一映射,但是,当您去掉所有Python引用计数的东西时,它看起来非常基本: // numz, denz, and modz are copies of the arguments. // resz, gcdz ar temporarie
谢谢 该函数的C源代码可以在
GMPy\u MPZ\u function\u Divm
中找到。正如您所看到的,它实际上不是到底层C代码的一对一映射,但是,当您去掉所有Python引用计数的东西时,它看起来非常基本:
// numz, denz, and modz are copies of the arguments.
// resz, gcdz ar temporaries.
if (mpz_invert(resz, denz, modz)) { // inverse exists?
ok = 1;
} else { // num, den AND mod have a gcd > 1?
mpz_init(gcdz);
mpz_gcd(gcdz, numz, denz);
mpz_gcd(gcdz, gcdz, modz);
mpz_divexact(numz, numz, gcdz);
mpz_divexact(denz, denz, gcdz);
mpz_divexact(modz, modz, gcdz);
mpz_clear(gcdz);
ok = mpz_invert(resz, denz, modz);
}
if (ok) {
mpz_mul(resz, resz, numz);
mpz_mod(resz, resz, modz);
mpz_clear(numz);
mpz_clear(denz);
mpz_clear(modz);
return resz;
} else {
mpz_clear(numz);
mpz_clear(denz);
mpz_clear(modz);
return NULL;
}
从数学上讲,它只计算
divm(a,b,m)
的表达式b-1*a%m
,当然假设该表达式是有效的(例如,b
为非零)