zoukankan      html  css  js  c++  java
  • [康复计划]-数论基础

    感觉这几个月做的数学都是把数学当工具的数学题,欧拉函数、莫比乌斯之类的好像上一次做还是在上一次 好几年前,于是在洛谷上找了几个专题来练一练。隔了感觉有两三年了,其实好多东西都忘差不多了。

    (待更新)


    零碎知识

    一些可能会用到的零碎的知识点,最近做题遇上的。

    • 对于实数(n,m,x),有(egin{aligned}lfloor frac{lfloor n floor+m}{x} floor=lfloorfrac{n+m}{x} floorend{aligned}),对于上取整同样成立。
      • 因为是在复习就直接引入一个更强的命题了:对于(R)上连续且单调的函数(f(x)),如果有(f(x)in  ightarrow xin ),那么就总有(egin{aligned}lfloor f(x) floor=lfloor f(lfloor x floor ) floorend{aligned})成立。
      • ①若(xin ),则$x=lfloor x floor $,直接成立。
      • ②否则,(x otin),由单调性给出(f(x)> f(lfloor x floor)),加上取整:(lfloor f(x) floorgeqlfloor f(lfloor x floor ) floor),假设它们不相等,即若(lfloor f(x) floor>lfloor f(lfloor x floor ) floor),则(lfloor f(x) floor in(f(lfloor x floor ),f(x)]),接着连续函数介值定理告诉我们,存在(y:yin (lfloor x floor ,x],f(y)=lfloor f(x) floor),但是因为(x otin)((lfloor x floor ,x])里面是不存在整数的,矛盾,(Q.E.D.)
      • 证明了这个更强的命题,上面那句话就只要让(f(n)=frac{n+m}{x})就行,不难验证函数满足我们要的性质。特别地,在做一些除法分块的时候,我们会用得上像是(egin{aligned}lfloor frac{lfloor frac{n}{d} floor}{x} floor=lfloorfrac{n}{dx} floorend{aligned})这样的结论,也可以从右往左,把一个东西凑成能分块的形式。
      • 类似地让(f(n)=sqrt n)也满足性质,所以(egin{aligned}lfloor sqrt{ lfloor n floor } floor =lfloor sqrt {n} floor end{aligned})也是成立的。
      • 上面所有证明把下取整改成上取整,同样成立。
    • 约数个数函数(d(n)=sum_{d|n}1),对于里面的乘积的(d(nm)),它可以被写成(egin{aligned}d(nm)=sum_{i|n}sum_{j|m}[(i,j)=1]end{aligned})
      • 里面那个([(i,j)=1])可以展成莫比乌斯。
      • 里面的([(i,j)=1])是一个比写成1要更强的条件,它原本就是想统计(ij)有多少对,但如果直接写1,就可能把一个约数算了多次,比如(d(4 imes 6))这种,有(2|4,2|6)(4|4,1|6),4这个约数被算了好几次。
      • 回顾(d(p_1^{q_1} p_2^{q_2}dots)=(q_1+1)(q_2+1)dots)这个式子,其实我们只要保证第(k)个质因数(p_k)被恰好枚举(q_k+1)次,所以我们干脆就让每一轮枚举的时候,保证对于每个(p_k)(n)(m)只有一个贡献了(p_k),也就是((i,j)=1)这个条件。
      • 感觉这个证明好无聊啊

    欧拉函数和欧拉定理

    因为是复习就不搞什么概念的引入了,数论里(英文里直接搜Euler function搜到的是欧拉的另一个函数,一般数论的欧拉函数叫Euler's totient function)我们定义欧拉函数(egin{aligned}varphi(n)end{aligned})表示(1,2,dots,n)这些数里和(n)互质的数的个数,一般写成(egin{aligned}varphi(n)=sum_{i=1}^n [(n,i)=1]end{aligned})这样子(后面会见到,写成这种艾佛森记号(也就是[表达式]这种记号)的形式可以用莫比乌斯函数搞一些操作啥的),这里我们说欧拉函数是个积性函数,即:(forall (n,m):f(n)f(m)=f(nm))。具体证明不写了,冲不动了。

    算法竞赛里求值才是我们关心的,首先是一个比较显然的:如果(p)是质数,那样(varphi(p)=p-1),进一步容易给出(varphi(p^k)=p^k-p^{k-1}=p^k(1-frac{1}{p})),于是不难给出一般的求法(egin{aligned}varphi(n)=nprod_{p_i} (1-frac{1}{p_i})end{aligned})

    于是,积性能用来做线性筛,而要求单个欧拉函数,如果(n)不是很大,就直接用上面的式子,(O(sqrt n))地求出单个(varphi(n)),要更快的做法就是Pollard-Rho来做质因数分解。

    接着从同余的角度看,(varphi(n))也可以说是(n)的既约剩余系的大小,于是$$egin{aligned}(a,m)=1 ightarrow a{varphi(m)}prod_{i=1}{varphi(m)} x_i=prod_{i=1}{varphi(m)}(ax_i)equivprod_{i=1}{varphi(m)}x_i(mod m)end{aligned}$$

    也就得到了一般说的欧拉定理((a,m)=1,a^{varphi(m)}equiv 1(mod m))

    然后还有一个更强的扩展欧拉定理:

    • (b<varphi(m))时,(egin{aligned}end{aligned})(egin{aligned}a^bequiv a^b(mod m)end{aligned})
    • 否则,(bgeq varphi(m))时,$$egin{aligned}a^bequiv a^{b mod varphi(m)+varphi(m)}(mod m)end{aligned}$$。

    注意(b<varphi(m))的时候不一定成立,这一版也是一个题比较麻烦的地方。

    扩展欧拉定理主要还是用来处理比较大的指数(b),以及注意到会把模(m)的问题转化为模(varphi(m))的问题,而(varphi(varphi(dots(m))))这种套娃下降的是非常快的,所以经常可以用来做一些套娃操作,比如luogu4139这题,求(egin{aligned}2^{2^{2^{dots}}}mod pend{aligned})的答案,设答案是(x),就可以转化成(2^{xmod varphi(p)+varphi(p)}),一直迭代到(p=1)为止。

    还有CF上一个题(https://www.luogu.com.cn/problem/CF906D )也是用类似的性质。

    卷积、莫比乌斯函数和莫比乌斯反演

    冲不动了,懒得写了,有人看再更新。

    一些练习

    https://www.luogu.com.cn/problem/P2303 ,求(sum _{i=1}^n (i,n))的值,原式写成(sum_{i=1}^n sum_{d=1}^n[(i,n)=d]),这里上下界都是(n),就不上莫比乌斯了,直接就能写成欧拉函数:(sum_{d=1}^n sum_{i=1}^n[(frac{i}{d},frac{n}{d})=1]),最后就是(sum_{d|n} varphi(frac{n}{d}))

    https://www.luogu.com.cn/problem/P3327 ,用到前面的结论,先写成(egin{aligned}sum_{i=1}^nsum_{j=1}^m sum_{x|i} sum_{y|j}[(x,y)=1]end{aligned}),然后大胆地把后面的写成莫比乌斯([(x,y)=1]=sum_{d|(x,y)}mu (d)),原来的式子一通化简成(egin{aligned}sum_{d=1}^n mu (d)sum_{x=1}^{lfloor frac{n}{d} floor}lfloorfrac{n}{dx} floor sum_{y=1}^{lfloor frac{m}{d} floor }lfloor frac{m}{dy} floor end{aligned}),后面的取整就用到前面提到的性质,写成能除法分块的形式,然后(O(sqrt n))地解决。

    https://www.luogu.com.cn/problem/P2257 ,和上一题类似,先改成枚举质数,然后上一个莫比乌斯,(egin{aligned}=sum_{pin mathcal{P}}sum_{d=1}^n mu(d)lfloor frac{n}{pd} floor lfloor frac{m}{pd} floor end{aligned})的形式,但写成这样还是不够快,这里我们做一个小小的变量替换,令(T=pd),然后交换次序,(p)加上一个(p|T)的限制:(egin{aligned}sum_{T=1}^n lfloor frac{n}{T} floor lfloor frac{m}{T} floor sum_{pin mathcal{P},p|T} mu(frac{T}{p})end{aligned})。后面的式子可以(O(frac{n}{log n}log n)=O(n))地预处理出来,结合前缀和跟前面除法分块。

  • 相关阅读:
    TP5.1 分页CSS样式(转载)
    简单的layui二级联动
    关于layui部分表单不显示的问题(Select, checkBox)
    MySQL 开启远程访问权限 | 宝塔系统
    tp5.1 本地正常, 线上route.php不起作用的问题
    cocos自动图集
    微信小程序video
    nuxt https
    接口数据加密
    node里读取命令行参数
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/15294579.html
Copyright © 2011-2022 走看看