用于模数除法的代码或算法

Code or Algo for Modulo Division

本文关键字:代码 算法 除法 用于      更新时间:2023-10-16

我需要找到Res=(A/B)%p。(p是素数)。

我的Num=A%p,Den=B%p。

有没有办法只使用Num、Den和p来找到Res?

我偶然发现:

(a / b) mod p = ((a mod p) * (b^(-1) mod p)) mod p 
i.e. Res = (Num * b ^ (p - 2) % p) % p

现在如何使用Den找到b^(p-2)%p?

如果你能为我提供一个C++/C代码,我会非常高兴,因为我可以直接在游戏中使用它,否则,请帮助我找到一个公式,这样我就可以自己获得Res。

您可以使用快速求幂得到b^(p-2)%p的结果。

int qexp (int b, int e) {
    if (e == 0) return 1;
    long long h = qexp(b, e/2); //long long to prevent overflow in next step
    h *= h;
    h %= p;
    if (e % 2 == 0) return h;
    else return (h*b)%p;
}

使用qexp(b, p-2); 调用