zoukankan      html  css  js  c++  java
  • 费马小定理(新方法)

    费马小定理

    内容:当p为质数,且gcd(a, p)=1,那么$ a^{p-1}equiv 1 (mod p ) $

    证明:
    构造出素数p的既约剩余系(最小公约数为1)

    (P=) { (1,2,3, ··· ,p-1) }

    因为(a, p)=1,所以A也是一个既约剩余系

    $ A=$ { (a, 2a, 3a, ··· ,(p-1)a) }

    因为A在mod p意义下把余数全取到了,所以

    $ 1 imes 2 imes 3 imes ··· imes (p-1)equiv a imes 2a imes 3a imes ··· imes a(p-1) (mod p ) $

    $ (p-1)! equiv (p-1)! a^{p-1} ( mod p ) $

    因为$ ( (p-1)!, p )=1 $
    所以

    $ a^{p-1}equiv 1 (mod p ) $

    当遇到求$ a/b mod p $(p为质数)时,因为除法不能分开mod,所以要变成

    $ a imes b^{-1} mod p $

    运用费马小定理再变

    $ a imes (b{p-1})b{-1} mod p $

    $ a imes b^{p-2} mod p $

    不过,好麻烦啊

    无聊时逛了wck的博客,看到他看到了vfk的神奇代码:(此处转载代码)

    rfact[1] = 1;
    for (int x = 2; x <= n; x++)
        rfact[x] = (s64)rfact[Mod % x] * (Mod - Mod / x) % Mod;
    

    rfact[i]1/i mod p,称为i的逆元
    证明:
    设$ p=kx+b, k=left lfloor frac{p}{x} ight floor, b=p mod x $,要求rfact[x].

    (ecause pequiv kx+b (mod p ))

    $ herefore xpequiv kx+b (mod p ) $

    $ frac{p}{b}equiv frac{k}{b}+frac{1}{x} (mod p ) $

    $ frac{1}{x} equiv frac{p-k}{b}(mod p ) $

    所以递推就可以把逆元全求出来。

    告别快速幂。

    PS:

    好像发现了一些问题……
    这里的Mod一定要是质数,否则会有错。
    如果Mod不是质数,那么只能用扩展欧几里得。
    (rfact[x] equiv frac{1}{x} (mod p))
    (x cdot rfact[x] - kp= 1)
    扩展欧几里得可求。

  • 相关阅读:
    [UVa514] Rails
    今日才真正懂了BFS
    [UVa11292] Dragon of Loowater
    [UVa] TEX Quotes
    白书杂七杂八
    [OpenJudge] Feed_Accounting
    [OpenJudge] Jolly_Jumpers
    Restart
    Collection of Websites
    Oracle11完全卸载方法
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/4373545.html
Copyright © 2011-2022 走看看