zoukankan      html  css  js  c++  java
  • ACM的数学基础

     懒得整理了,请勿往下看。

     

       (一)欧拉函数

      设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值,这里函数φN→Nn→φ(n)称为欧拉函数。有如下一些性质:

      (1)欧拉函数是积性函数——m,n互质,φ(mn)=φ(m)φ(n)

      (2)特殊性质:当n为奇数时,φ(2n)=φ(n), 证明与上述类似。欧拉函数值总是为偶数(除了特殊情况)

      (3)若n为质数则φ(n)=n-1

      (4)n=pkφ(n) = p- p(k-1) = (p-1)*p(k-1),因为除了p的倍数外,其他数都跟n互质。

      (5)φ函数值的通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)*…..*(1-1/pn),其中p1, p2……pnx的所有质因数,且x>=2。特殊情况 φ(1)=1。 (注意:每种质因数只需要一个。

      比如12=2*2*3那么φ(12)= 12*(1-1/2)*(1-1/3)=4,因为1,5,7,11均和12互质。比如φ(8)=4,因为1,3,5,7均和8互质。

       (二)欧拉定理

        若n与a互质,且皆为正整数,则

       (三)乘法逆元

       定义:满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。

      (1)为什么要有乘法逆元呢?

       答:当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。

       定理:a存在模p的乘法逆元的充要条件是gcd(a,p) = 1

      (2)如何求解 (a/b) mod p 的结果?

       答:我们可以通过求b关于p的乘法逆元k,将a乘上k再模p( 即ans=(a*k)%p,这样就比较好算了 )。其结果与 (a/b) % p 等价。

      (3)如何证明?

      证明:
        根据b*k≡1 (mod p)有b*k=p*x+1,那么k=(p*x+1)/b。
        把k代入(a*k) mod p,得:
          (a*(p*x+1)/b) mod p
        =((a*p*x)/b+a/b) mod p
        =[((a*p*x)/b) mod p +(a/b)] mod p
        =[(p*(a*x)/b) mod p +(a/b)] mod p
        //注:p*[(a*x)/b] mod p=0,因为既然要取模,a/b的结果肯定是为正整数。
        所以原式等于:(a/b) mod p 

      证毕!

     

       补:还有一条公式也是用于求模用的:

     

            (ans表示我们要求的结果,且无需考虑所有数字的特殊性)

  • 相关阅读:
    豆瓣还是能学到东西的!
    Mip-Mapping很重要
    果然还是SB了
    Don't Starve,好脚本,好欢乐
    Soft Renderer的乐趣
    java classloader原理深究
    用gitolite搭建git server
    神话设计模式 --开端
    Dive into Spring framework -- 了解基本原理(二)--设计模式-part2
    Dive into Spring framework -- 了解基本原理(二)--设计模式-part1
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4844892.html
Copyright © 2011-2022 走看看