zoukankan      html  css  js  c++  java
  • 数论

    前置知识:常用公式

    干货来啦,这里记录了一些推柿子是使用频率很高的公式(貌似可能也不知道有没有证明),善用这些公式可以带来极大的简洁。

    1. [d(ij)=sumlimits_{xvert i} sumlimits_{yvert j}[gcd(x,y)=1] ]

      Siyuan 博客中的证明(Extended部分)

    2. (p_i^{e_i})(n)的唯一分解

      [prodlimits_{i=1}^{k}(p_i^{e_i}+1)=sumlimits_{i|n}[(i,frac{n}{i})=1]i ]

    前置知识:推柿子小技巧

    我会把自己总结的一些常用技巧扔在下面

    1. 改变枚举顺序,常见的有改枚举约数为枚举倍数

    前置知识:常见定理

    1. 费马小定理

      (p) 为质数且 (a,p) 互质,则:

      [a^{p-1}equiv 1pmod p ]

      证明略。

    2. 威尔逊定理

      (p) 为质数,则 ((p-1)!equiv -1pmod p)。证明略。

    3. 二次探测定理

      (p) 为质数,且 (x^2equiv 1pmod p),则 (xequiv 1pmod p)(xequiv -1 pmod p)

      证明:原式可以写为 ((x+1)(x-1)equiv 0pmod p),由唯一分解定理可知,必然有 (xequiv 1pmod p)(xequiv -1 pmod p)。证毕。


    莫比乌斯函数及其反演

    • 定义

      定义莫比乌斯函数:

      [mu(x)=egin{cases}1,x=1\(-1)^k,x=p_1 imes p_2 imes ... imes p_k,p_i in Prime \ 0,otherwiseend{cases} ]

      可以看到,(u(x))(x)有平方因子时为(0),否则若(x)的质因子个数为奇数则(mu(x)=-1),偶数则为(1)

    • 性质

      [mu * I = e ]

      其中

      [I(x)=1,e(x)=egin{cases}1,x=1\0,otherwise end{cases} ]

    • 证明

      显然

      [(mu * I)(1)=1 ]

      (i>1)

      [(mu * I)(i)=sumlimits_{d|i}mu(d) ]

      考虑对 (i) 进行质因数分解,由 (mu) 的定义我们知道,(i) 的平方因子在这里都可以看做次数为 (1),即我们可以找到 (i'=p_1 imes p_2 imes ... imes p_k) 使得 ((mu * I)(i)=(mu * I)(i'))

      思考这个 (i') 的答案,带入容易知道

    [egin{aligned} sumlimits_{d|i}mu(d)&=sumlimits_{i=0}^{k}(-1)^i1^{k-i}inom{k}{i} \ &=(1-1)^k\&=0 end{aligned} ]


    Min_25筛

    • 定义

      这篇博客这篇博客

    • 一些细节/补充

      1. 可以使用 Min_25筛 的充分条件:(f) 是积性函数;(f(p^k)) 可以快速计算((p) 是质数);(f) 在质数处的前缀和可以快速运算(其实这就是 Min_25筛 的第一部分,当然有时候这个东西可以直接得到,但如果不能直接计算时,要求把 (f) 拆成若干个完全积性函数(第一部分需要用到的性质))。
      2. 对于需要保存的形如 (lfloor frac{n}{i} floor) 的下标,我们可以以 (sqrt{n}) 为界氛围两部分保存。
      3. (1) 在所有的函数中均为被算进去,最后要加上 (1)。、
    • 例题:

      1. luogu P5325 【模板】Min_25筛 代码
      2. SP34096 DIVCNTK - Counting Divisors (general) 题解

    二项式反演

    著名的二项式定理:

    [(a+b)^n =sumlimits_{i=0}^n inom n k a^k imes b^{n-k} ]

    二项式反演就是已知:

    [f_i=sumlimits_{j=0}^i inom{i}{j} g_j ]

    然后推出来:

    [g_i=sumlimits_{j=0}^i (-1)^{i-j} f_j ]

    证明(在原式中带入 (g_j)):

    [egin{aligned} f_i&=sumlimits_{j=0}^i inom{i}{j}sumlimits_{k=0}^j (-1)^{j-k}inom{j}{k}f_k\ &=sumlimits_{j=0}^i sumlimits_{k=0}^j(-1)^{j-k}inom i j inom j k f_k\ &=sumlimits_{j=0}^i sumlimits_{k=0}^j (-1)^{j-k}inom i k inom{i-k}{i-j}f_k\ &=sumlimits_{k=0}^iinom i ksumlimits_{j=k}^i (-1)^{j-k}inom{i-k}{i-j}f_k\ &=sumlimits_{k=0}^i inom i k f_ksumlimits_{j=0}^{i-k}(1-1)^{i-k}\ &=f_i end{aligned} ]


    Miller_Rabin素数测试

    我们钦定一个 (a),对 (p) 做一次测试:

    1. (p) 为素数,首先一定得满足费马小定理。
    2. (p-1=2^k imes q),那么 (a^{2^k imes q}equiv 1pmod p),我们先算出 (a^q),然后用二次探测定理一次一次判就好了。

    若一个数通过一次测试,则它是素数的概率是 (25\%),我们可以多选几个数提高准确率。


    BSGS及其拓展

    [a^xequiv bpmod p ]

    • BSGS

      先考虑 ((a,p)=1) 的情况:

      类似分块,我们取块大小为 (k=lceil sqrt p ceil),那么如果有解,形式一定可以表达为 (a^{km-i}equiv bpmod p)(min N^*,0le i<k))。也就是 (a^{km}equiv b imes a^ipmod p)。我们只需要预处理所有 (k)(b imes a^i)(放在一个哈希表里),然后一个一个查询 (a^{km}) 就好了(由欧拉定理,如果 (m> k) 还没找到解就一定无解了)。

    • ExBSGS

      现在 ((a,p) e 1) 了,怎么办呢?

      先给出一个结论:若 ((a,p) mid b)(b e1),则此方程无解(需要注意的是逆命题不一定成立)。

      我们现在把无解的情况判掉,记 (d=(a,p)),然后考虑做一点转化:

      [a^xequiv bpmod p\ a^{x-1}frac a dequiv frac b d pmod{frac p d}\ a^{x-1}equivfrac b d(frac a d)^{-1}pmod{frac p d} ]

      如果 (d=1), 那么我们可以直接去跑 BSGS,否则我们发现每次迭代后 (p) 必然减小,一直迭代下去就好了。


    综合例题:

    1. UOJ #42. 【清华集训2014】Sum 题解
    2. CF1106F Lunar New Year and a Recursive Sequence
    3. UOJ #82. 【UR #7】水题生成器
    4. CF364D Ghd
    5. UOJ #216. 【UNR #1】Jakarta Skyscrapers
    6. luogu P5345 【XR-1】快乐肥宅
    7. AGC003D Anticube
    8. AGC010D Decrementing
    9. AGC011E Increasing Numbers
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令
    ubuntu中执行可执行文件时报错“没有那个文件或目录”的解决办法(非权限问题)
    不同编译器下,定义一个地址按x字节对齐的数组
    对冒泡排序法的个人理解
    通过py2exe打包python程序的过程中,解决的一系列问题
    IAR工程名修改
    stm8编程tips(stvd)
    获取单片机唯一id(stm32获取单片机唯一id)
    按键抖动的处理方法(按键外部中断)
    stm32--USB(作为U盘)+FatFs的实现
  • 原文地址:https://www.cnblogs.com/With-penguin/p/13040911.html
Copyright © 2011-2022 走看看