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表示我们要求的结果,且无需考虑所有数字的特殊性)

  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4844892.html
Copyright © 2011-2022 走看看