python - 是否有与 python gmpy2 库 divm(...) 函数功能相同的 c++ gmp 库函数?

标签 python c++ gmp gmpy

正如标题所说,我正在尝试在 C++ gmp 库中找到一个与 gmpy2 python 库的 divm(...) 函数执行相同操作的函数。

我无法想象 gmpy2 有这个方法,而 gmp C++ 库没有任何东西可以做同样的计算。

如果这不存在,我将不胜感激任何有关从头开始制作 divm 函数的建议(仍然必须使用 gmp,因为我正在通过 mpz_class 使用大于标准整数的值)。

谢谢!

最佳答案

可以找到该函数的 C 源代码 here ,在 GMPy_MPZ_Function_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;
}

从数学上来说,它只是计算表达式 b<sup>-1</sup> * a % m对于 divm(a, b, m) ,当然假设该表达式有效(例如 b 非零)。

关于python - 是否有与 python gmpy2 库 divm(...) 函数功能相同的 c++ gmp 库函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60179606/

相关文章:

c - gmp库的mdi_init的C实现

c++ - 如何在 Windows 上安装 GMP Mp? (C++)

Python简单 turtle 程序

python - 在不使用 try except 的情况下填充字典

Python - 来自特定文件夹的 Flask : Importing a . json 文件并根据 GET/POST 请求返回

c++ - C编程: translated function from MATLAB to C gives slightly (but significantly) different result

c++将整数转换为8个字符的十六进制,删除前两个字符,使其仅为6个字符的十六进制,然后转换回整数

c - GMP pow 中的溢出处理

python - 提取文件名并将其用作 Pandas 中 DataFrame 的标签

C++ 类的静态成员在构造函数之后初始化