• 数论基础


    数论基础

    艾佛森括号

    \[[P]=\begin{cases} 1& P\text{ is true}\\ 0& \text{otherwise} \end{cases} \]

    数论分块

    可以 \(O(\sqrt n)\) 地求形如 \(\sum_{i=1}^n f(i)g(\lfloor\dfrac{n}{i}\rfloor)\) 的式子,

    但需要 \(f(i)\) 的前缀和,以及求出 \(g(\lfloor\dfrac{n}{i}\rfloor)\)

    引理 1

    \(\lfloor\dfrac{n}{i}\rfloor(1\le i\le n)\) 的取值只有 \(O(\sqrt n)\) 种,大约 \(2\sqrt n\)

    分类讨论,证明:

    • \(i\le\sqrt n\) ,此时 \(i\) 只有 \(\sqrt n\) 个,故 \(\lfloor\dfrac{n}{i}\rfloor\) 只有 \(\sqrt n\)
    • \(i>\sqrt n\) ,此时 \(\dfrac{n}{i}<\sqrt n\) ,也只有 \(\sqrt n\)

    结论成立。

    引理 2

    \[\lfloor\dfrac{a}{bc}\rfloor=\left\lfloor\dfrac{\frac a b}{c}\right\rfloor \]

    证明:

    \[\dfrac{a}{b}=\lfloor\dfrac{a}{b}\rfloor+r(0\le r<1)\\ \Rightarrow\lfloor\dfrac{a}{bc}\rfloor=\lfloor\dfrac{a}{b}\cdot\dfrac{1}{c}\rfloor =\lfloor\dfrac{1}{c}(\lfloor\dfrac{a}{b}\rfloor+r)\rfloor= \left\lfloor\dfrac{\frac a b}{c}+\dfrac r c\right\rfloor= \left\lfloor\dfrac{\frac a b}{c}\right\rfloor \]

    结论

    实现时,只需要求每一个取值块的右端点,

    即给 \(l\) ,求最大的 \(r\) 满足 \(\lfloor\dfrac{n}{l}\rfloor=\lfloor\dfrac{n}{r}\rfloor\)

    有结论:\(r=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor\) ,证明如下:

    \(k=\lfloor\dfrac{n}{l}\rfloor\) ,则 \(k\le \dfrac{n}{l}\)

    所以 \(\lfloor\dfrac{n}{k}\rfloor\ge\left\lfloor\dfrac n{\frac{n}{l}}\right\rfloor=\lfloor i\rfloor=i\)

    \(r\) 即为最大的满足条件的 \(i\)\(i_\max=\lfloor\dfrac{n}{k}\rfloor=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor\)

    实现:

    for (int l = 1, r; l <= n; l = r + 1) {
        r = n / (n / l);
        // calc (l, r)
    }
    

    筛法

    埃式筛

    一个很易懂的想法:每次将所有数的倍数标记,没有被标记就是质数

    这样的复杂度显然调和级数,为 \(O(n\log n)\)

    埃式筛就加以改进:指标记质数的倍数

    比较显然,唯一分解定理保证每个数都能被筛到

    这样的做法是 \(O(n\log\log n)\) 的,证明需要微积分基础,此处略

    欧拉筛 / 线性筛

    这种做法能做到线性

    注意到,埃式筛仍然会重复筛。

    线性筛的思想是,每个数只被其最小质因数筛到

    这个思想可以看出复杂度为 \(O(n)\)

    实现上的区别:

    埃式筛是枚举质数 \(i\) ,枚举倍数 \(ij\)

    线性筛是枚举 \(j\) ,再枚举质数 \(i\)

    const int N = 1e7 + 5;
    int vis[N], p[N], cnt;
    void get() {
        for (int i = 2; i <= 1e7; i++) {
            if (!vis[i]) p[++cnt] = i;
            for (int j = 1; j <= cnt && i * p[j] <= 1e7; j++) {
                vis[i * p[j]] = 1;
                if (i % p[j] == 0) break;
                /*
                i % p[j] == 0 ,即 i 被之前的 p[j] 筛过了,
                由于 p 中的数是从小到大的
                i 乘上更大素数的结果也被 p[j] 筛过,所以直接 break
                */
            }
        }
    }
    

    数论函数

    定义

    数论上,数论函数(或算术函数)指定义域为正整数,值域为复数的函数

    加性函数

    对于数论函数 \(f\) ,满足 \(\forall\gcd(a,b)=1,f(a)+f(b)=f(ab)\) ,则 \(f\) 为加性函数

    特别地,若 \(f\) 对所有的 \((a,b)\) 都满足 \(f(a)+f(b)=f(ab)\) ,则 \(f\) 为完全加性函数

    • 加性函数一定有 \(f(1)=0\)

    常见加性函数

    • \(\omega(n)=\sum_{p\in\mathbb{P}}[p|n]\)\(n\) 本质不同质因子个数
    • \(\Omega(n)=\sum_{p\in\mathbb{P}}\sum_{p^a|n}1(a>0)\)\(n\) 所有质因子个数,完全加性

    积性函数

    对于数论函数 \(f\) ,满足 \(\forall \gcd(a,b)=1,f(ab)=f(a)f(b)\) ,则 \(f\) 为积性函数

    特别地,若 \(f\) 对所有的 \(a,b\) 都满足 \(f(ab)=f(a)f(b)\) ,则 \(f\) 为完全积性函数

    • 积性函数一定满足 \(f(1)=1\)

    常见积性函数

    • 元函数 \(\epsilon(n)=[n=1]\) ,完全积性

    • 单位函数 \(\mathbf{1}(n)=1\) ,完全积性

    • 标号函数 \(\mathbf{ID}_k(n)=n^k\) ,完全积性

    • 约数函数 \(\sigma_k(n)=\sum_{d|n} d^k\)

    • 欧拉函数 \(\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]\)

    • 莫比乌斯函数

      \[\mu(n)=\left\{ \begin{aligned} 1, & & n=1 \\ (-1)^k & & n=\Pi_{i=0}^k p_i\and\forall i\ne j,a_i\ne a_j \\ 0 & & \text{otherwise} \end{aligned} \right. \]

    性质:

    \(f,g\) 为积性函数,则

    • \(h(x)=f(x^C)\)
    • \(h(x)=f^C(x)\)
    • \(h(x)=f(x)g(x)\)
    • \(h(x)=(f*g)(x)\) ,即狄利克雷卷积

    都是积性函数

    \(n=\prod p_i^{a_i}\)

    \(F(n)\) 为积性函数,则 \(F(n)=\prod F(p_i^{a_i})\)

    \(F(n)\) 为完全积性函数,则 \(F(n)=\prod F(p_i)^{a_i}\)

    积性函数筛法

    基本上,积性函数都有线性筛法。

    为了方便表示,令 \(x=i*p_j\)

    筛出积性函数其实只用增加几个部分:初始化(包括 1)、标记时的两种情况

    欧拉函数

    1. \(i\;mod\; p_j\ne 0\)\(x,p_j\) 互质,由于是积性函数,

      直接 \(\varphi(x)=\varphi(i)\varphi(p_j+1)\) ,即 \(\varphi(x)=(p_j+1)\varphi(i)\)

    2. \(i\;mod\;p_j=0\)\(i\) 包含了 \(x\) 的所有质因数

      \[\begin{aligned}\varphi(x)&=x\prod_{i=1}^k\dfrac{p_i-1}{p_i}\\ &=p_j\times i\prod_{i=1}^k\dfrac{p_i-1}{p_i}\\&=p_j\times\varphi(i) \end{aligned} \]

    莫比乌斯函数

    \(\mu(1)=1,\mu(p)=-1\)

    1. \(i\;mod\; p_j\ne 0\)\(\mu(x)=-\mu(i)\)

    2. \(i\;mod\;p_j=0\) ,出现多次,\(\mu(x)=0\)

    约数个数

    \(d(i)\) 表示 \(i\) 的约数个数, \(num_i\)\(i\) 最小素因子的个数

    小学奥数说:若 \(n=\Pi_{i=1}^m p_i^{a_i}\) ,则 \(d(n)=\Pi_{i=1}^m (a_i+1)\)

    1. \(i\;mod\; p_j\ne 0\)\(p_j\)\(x\) 的最小质因数,且第一次出现,所以 \(num_x=1,d_x=2d_i\)

    2. \(i\;mod\;p_j=0\)\(p_j\) 出现次数加一,约数个数用出现次数更新

      所以 \(num_x=num_i+1,d_x=d_i\times\frac{num_x+1}{num_x}\)

    约数和

    \(f(i)\) 表示 \(i\) 的约数和, \(g_i\) 表示 \(\sum_{j=0}^k p^j\) ,其中 \(p\)\(i\) 最小素因子, \(k\) 为出现次数

    小学奥数说:若 \(n=\Pi_{i=1}^m p_i^{a_i}\) ,则 \(f(n)=\prod_{i=1}^m\sum_{j=0}^{a_i}p_i^j\)

    1. \(i\;mod\; p_j\ne 0\) ,最小素因子,次数为 1,\(f_x=f_i*(1+p_j),g_x=1+p_j\)
    2. \(i\;mod\;p_j=0\) ,出现次数加一,\(g_x=g_i*p_j+1,f_x=f_i\times\frac{g_x}{g_i}\)

    一般积性函数

    如果积性函数 \(f\) 满足:对于任意质数 \(p\) 和正整数 \(k\) ,可以在 \(O(1)\) 求出 \(f(p^k)\) ,则 \(f\) 可以线性筛

    设合数 \(n=\prod_{i=1}^k p_i^{a_i}\) ,其中 \(p_1<p_2<\cdots<p_k\) 为质数,记 \(g_n=p_1^{a_1}\)

    \(n\) 在线性筛中被 \(x\cdot p\) 筛掉,\(p\) 为质数,则 \(g_n\) 满足:

    • \(x\bmod p=0\)\(g_n=g_x\cdot p\)
    • 否则,\(g_n=p\)

    \(g_n\) 可以筛出 \(f_n\)

    • \(n=g_n\) ,说明 \(n\) 是某个质数的次幂,可以 \(O(1)\) 计算
    • 否则,\(f(n)=f(\dfrac{n}{g_n})\cdot f(g_n)\)

    狄利克雷卷积

    看起来高级的名字实际上是定义了一种新的运算,大大简化了表示

    两个数论函数 \(f,g\) 的狄利克雷卷积 \(f*g\) 仍是一个数论函数,且 \((f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)

    狄利克雷卷积满足交换律 \(f*g=g*f\) 、结合律 \(f*(g*h)=(f*g)*h\) 分配律 \((f+g)*h=f*h+g*h\)

    根据各种函数性质得到:

    1. \(\mu*\mathbf{1}=\epsilon\)

    2. \(\varphi*\mathbf{1}=\mathbf{ID}\)

    3. \(f*\epsilon=f\)

    4. 由 1 式和 2 式

      \[\begin{aligned} \mu*1&=\epsilon\\ \mu*1*\varphi&=\epsilon*\varphi\\ \mu*\mathbf{ID}&=\varphi\\ \sum_{d|n}\mu(d)\dfrac{n}{d}&=\varphi(n) \end{aligned} \]

      两边同时除以 \(n\) ,得到了巧妙的式子:

      \[\dfrac{\varphi(n)}{n}=\sum_{d|n}\dfrac{\mu(d)}{d} \]

    5. 莫比乌斯反演定理可以用狄利克雷卷积证明

      即证明 \(F=f*1\Rightarrow f=\mu*F\)

      \(F\) 带入,\(f=\mu*F=\mu*(f*1)\) ,由交换律和结合律,\(f=(\mu*1)*f=f*\epsilon=f\) ,得证

    同余等价类

    在模意义下,每一个数都是一个同于等价类。

    比如,模 3 意义下,1 表示所有除以 3 余 1 的整数,即 \(\{1,4,7,\cdots,\}\)

    在模意义下,所有非负整数都可以被分为若干同余等价类

    剩余系

    \(p\) 的剩余系是 \(\{0,1,2,\cdots,p-1\}\) ,即小于 \(p\) 的非负整数

    这个集合包含了所有 \(\;mod\;p\) 的数,集合中每一个数都代表了一个同于等价类

    这个集合称为模 \(p\) 的剩余系,记作 \(Z_p\)

    缩系

    缩系,又称简化剩余系

    即在模 \(p\) 的剩余系中,与 \(p\) 互质的数的集合,称为 \(p\) 的缩系,记为 \(Z_p^*\)

    \(p=6\) 时,\(Z_p^*=\{1,5\}\)

  • 相关阅读:
    书本第十三章课后习题4、5、6
    软件工程一班第五小组知识树系统-软件测试计划
    第八周作业
    第七周作业——用面向对象方法分析研究书中习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
    第六周作业——建立订货系统的用例模型
    第五周作业——用状态转换图描绘复印机的行为
    第四周作业——在你的实际项目旅游网站中,网页主页面主要有哪些模块?
    第三周作业—— 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
    第二周作业——面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    有学生提到,在大学选课的时候,可以写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么? 请大家讨论。
  • 原文地址:https://www.cnblogs.com/KonjakLAF/p/16339769.html
Copyright © 2020-2023  润新知