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

  • 相关阅读:
    Swap Nodes in Pairs
    Search for a Range——稍微升级版的二分查找
    Set Matrix Zeroes——常数空间内完成
    Ubuntu系统---C++之Eclipse 开始工程项目
    Ubuntu系统---C++之Eclipse编译器 CDT插件安装
    Ubuntu系统---开机总会显示错误报告处理
    Ubuntu系统---C++之Eclipse IDE 编译器安装
    Ubuntu系统---终端下用g++进行c++项目
    Ubuntu系统---进行C++项目开发的工具
    YOLO---Darknet下的 GPU vs CPU 速度
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4844892.html
Copyright © 2011-2022 走看看