Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个c++;gmp库函数与python gmpy2库divm(…)函数的功能相同? 正如标题所说,我试图在C++ GMP库中找到一个函数,它与GMPY2 Python库的DIVM(…)函数做的事情相同。 我无法想象GMPY2有这个方法,GMP C++库没有任何东西可以做同样的计算。_Python_C++_Gmp_Gmpy - Fatal编程技术网

是否有一个c++;gmp库函数与python gmpy2库divm(…)函数的功能相同? 正如标题所说,我试图在C++ GMP库中找到一个函数,它与GMPY2 Python库的DIVM(…)函数做的事情相同。 我无法想象GMPY2有这个方法,GMP C++库没有任何东西可以做同样的计算。

是否有一个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

如果这不存在,我将感谢任何关于从头开始使用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 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
为非零)