两个数字划分的模数

Rah*_*bey 30 algorithm math

我们知道

(A + B) % P = (A % P + B % P) % P
(A * B) % P = (A % P * B % P) % P
Run Code Online (Sandbox Code Playgroud)

哪里P是素数.

我需要计算(A / B) % P哪里A,B可能非常大并且可能溢出.

这种模运算公式是否适用于(A / B) % P(A - B) % P.

如果没有,请解释正确答案是什么.

也许这是真的(A / B) % P = ((A % P) / (B % P)) % P吗?

我正在尝试计算(N*(N ^ 2 + 5)/ 6)%P,其中N可以大到10 ^ 15

这里A = n*(n ^ 2 + 5)肯定会溢出n = 10 ^ 15

IVl*_*lad 46

是的,但它有所不同:

(a - b) mod p = ((a mod p - b mod p) + p) mod p

(a / b) mod p = ((a mod p) * (b^(-1) mod p)) mod p
Run Code Online (Sandbox Code Playgroud)

哪里b^(-1) mod p模逆bMOD p.对p = prime,b^(-1) mod p = b^(p - 2) mod p.

编辑:

(N*(N ^ 2 + 5)/ 6)%P

您不需要任何模块化反转.只需简化分数:N or N^2+5将被2和整除3.所以划分他们然后你有(a*b) mod P.


Sal*_*ali 5

弗拉德的答案是正确的:

(a - b) mod p = ((a mod p - b mod p) + p) mod p
(a / b) mod p = ((a mod p) * (b^(-1) mod p)) mod p
Run Code Online (Sandbox Code Playgroud)

这些和其他一些操作在“ 等效性”部分中概述

只是想让您知道,这不仅适用于素数p。第一个将适用于任何p。第二个将任何工作p,其中b^(-1)模逆被定义。

可以使用扩展的Euclidian算法来计算模逆