除法取模

做题时,经常要求“答案模一个数”的结果。
并且这个数往往是1000000007。
如果只有乘法和加法,那么我们对此毫无压力。
但是,除法出现时,我们往往需要用高精除法。
而费马小定理给我们带来了福音!从此,我们再不用为了区区一个模1000000007而用高精除法了。

费马小定理:若p是质数,且a、p互质,那么a^(p-1) mod p = 1。
果断忽略证明...

现在,我们要求a/c mod p,通过一系列神奇的转化,那万恶的除法就会神奇地消失...

a / c mod p
= a / c mod p * 1
= a / c mod p * c^(p-1) mod p
= a * c^(p-2) mod p

转化完毕。


当c与p不互质的时候,费马小定理就无能为力了。
其实,我们还有另一种方法。

设a / c = b,要求b mod p
a = k1*p + b1,
b = k2*p + b2,
则目标就是求b2
那么原式化为(k1*p + b1) / c = (k2*p + b2)
b2*c + p(k2*c - k1) = b1
设k2*c - k1 = x, b2 = y,那么px + cy = b1,其中p、c和b1已知,则可通过不定方程求解得到y',调整y'使0<=y'

你可能感兴趣的:(除法取模)