首页 > 其他分享 >数论筛法小记

数论筛法小记

时间:2023-10-13 23:45:33浏览次数:40  
标签:frac 筛法 limits 数论 text 函数 积性 sum 小记

会挖坑,好让复习的时候长脑子。

以下所有 \(p\) 都是质数,即 \(p\in\mathbb{P}\),同时默认均为正整数。

Base

唯一分解定理(算术基本定理):

\[\begin{align} \forall n>1,n=\prod\limits_{i=1}^k p_i^{t_i} \end{align} \]

后面默认都分解了。

积性函数:

\[\begin{align} \forall x\perp y,f(xy)=f(x)f(y) \end{align} \]

完全积性函数:

\[\begin{align} \forall x,y\in\N_+,f(xy)=f(x)f(y) \end{align} \]

完全积性函数出现的比较少,不过积性函数也较好处理,可以线性筛。

经典的积性函数:

  • \(\varphi\):欧拉函数。有性质 \(\varphi(n)=n\prod{\frac{p_k-1}{p_k}}\) 和 \(n=\sum\limits_{d\mid n}\varphi(d)\)。

    第一个考虑 \(\varphi(p^t)\) 的取值,发现是 \(p^{t-1} (p-1)\) 就很好说明。

    第二个考虑 \(\frac{1}{n},\frac{2}{n},\dots,\frac{n}{n}\) 这一串数的个数,化成最简分数来算。

  • \(\mu\):莫比乌斯函数。原始定义是 \(\sum\limits_{i=1}^n\mu(i)=[n=1]\)。

    根据定义可得:

\[\mu(x)= \begin{cases} (-1)^k,&\forall p\mid n,p^2 \nmid n\\ 0,&\text{otherwise}. \end{cases} \]

  • \(\text{d}\) 与 \(\sigma\) 及 \(\sigma_k\):约数个数函数 与 约数和函数 及 除数函数。

    其实 \(\text{d}\) 就是 \(\sigma_0\)……

    表述可以是:\(\sigma_k(n)=\sum\limits_{d\mid n}d^k\)。

一些比较牛逼的完全积性函数:

  • \(\epsilon\),依夫瑟洛!:狄利克雷卷积下的单位元,\(\epsilon(n)=[n=1]\)。
  • \(\text{I}\):单位函数,\(\text{I}(n)=1\)。
  • \(\text{Id}\) 与 \(\text{Id}_k\):就是走个形式,\(\text{Id}_k(n)=n^k\)。

别的先不谈,考虑怎么算积性函数。

Sieve base

其实说筛之前应该先看一下积性函数的计算原理。

由于算术基本定理,任意数都可以表为若干个质数的次幂乘积。

因此我们只要分解 \(x\),就可以根据积性函数的性质乘出 \(f(x)\)。

由于分解难,往往是 \(\mathcal{O}(\sqrt{n})\) 的复杂度,当然有一些随机算法能做到更优。

然而另一种思路是主动去凑 \(n\),这在要求出 \(1\sim n\) 的 \(f\) 的值时就会更快。

这样就成了筛法。

埃筛 is too naive,看线性筛。

线性筛使得每个数字只被自己的最小质因子筛一次,过程如下:

Note: This is not pseudocode!
- If i is a prime
  - Add i into the P
- For all pri in P
  - Calc x=i*p
  - if p is a divisor of i
    * Calc x by p and i,then break
  - else f(x)=f(i)*f(p)

关键步骤在 * 一句,我们需要根据 \(p\) 和 \(i\) 算出 \(x=ip\) 的值,而此时 \(i\) 中已经含有至少一个 \(p\)。

可以使用无脑做法:\(f(x)=f(\frac{i}{p^t})f(p^t)\),显然可知 \(\frac{i}{p^t} \perp p^t\),正确性有保障。

注意像 \(x=p^t\) 这样形式的情况要特别算。

这个基本就是线性筛积性函数的普适做法,感觉其实非常地简单但我当初就是听不懂。

Dirichlet Convolution

即狄利克雷卷积(以下简称卷积),定义如下:

若 \(h=f*g\),则

\[h(n)=\sum\limits_{d\mid n}f(d)g(\frac{n}{d})=\sum\limits_{d\mid n}g(d)f(\frac{n}{d}) \]

卷积满足交换律:\(f*g=g*f\)。

同时满足结合律:\((f*g)*h=f*(g*h)\)。

一些常见的卷积:

  • \(\epsilon*f=f\)
  • \(\text{I}*\mu=\epsilon\)
  • \(\text{Id}_k*\text{I}=\sigma_k\)
  • \(\text{I}*\varphi=\text{Id}\)
  • \(\text{Id}*\varphi=\mu\)

上面这些都可以拆式子得到。

比较重要的,卷积结合点乘的特殊规律:

\((f\cdot g)*(f\cdot h)=f\cdot(g*h)\),要求 \(f\) 是完全积性函数。

考虑证明:

\[\begin{align} (f\cdot g)*(f\cdot h)(n) &=\sum\limits_{d\mid n} (f\cdot g)(d)(f\cdot h)(\frac{n}{d}) \\ &=\sum\limits_{d\mid n} f(d)f(\frac{n}{d})g(d)h(\frac{n}{d}) \\ &=\sum\limits_{d\mid n} f(n)g(d)h(\frac{n}{d}) \\ &=f(n)\sum\limits_{d\mid n} g(d)h(\frac{n}{d}) \\ &=f(n)\cdot(g*h)(n) \end{align} \]

显然成立。

Sqrt Decomposition

现在补充这个 trick。

标签:frac,筛法,limits,数论,text,函数,积性,sum,小记
From: https://www.cnblogs.com/LQ636721/p/17763542.html

相关文章

  • 素数的判定:筛法
    素数很有用,特别是在密码学领域中,比如RSA中很重要的一步就是寻找两个比较大的素数,通常的做法是先随机生成一个大整数,然后使用一些素性判定的方法,比如费马素性测试。在算法竞赛的数论题目中,素数也很常见,通常的做法是先找出一定范围内的所有素数,用到时再查表,筛法就可以做到。1.埃氏......
  • 我的国庆假期小记-先完成,再完美
    假期第一天玩游戏,刷视频,安逸之中似乎好像又有点无聊~假期第二天去朋友那玩了一天,逛书店的时候无意中看到一本书,买了下来以书为契机,准备找点事情来做,于是把之前一直拖延着的想法提上日程:总结下平时用过的一些技术。刚好在一个社群有大佬分享了一个放在飞书上的架构图,于是我打......
  • 理论的动态发展完完备与进化:数论Number Theory数域的进化史 与 Infinite Precision无
    InfinitePrecision:(0)数是什么?以有限的数元,度量与表示无限的现象、事物与状态,作为整个数学科学理论的根基。以Binary二进制为例,有{0,1},Constant/Dynamic系统建模上,两种state(状态)?0->1与1->0代表“change变化”?而Decimal十进制,有{0,1,2,3,4,5,6,7,8,9}十种数元,运算符号......
  • 字符串小记 II:字符串自动机
    OI中的自动机指的是“有限状态自动机”,它是对一串信号进行处理的数学模型,一般由以下三部分构成:字符集(\(\Sigma\)),能够输入进自动机的字符集合。状态集合(\(Q\)),相当于有向图中的节点。转移函数(\(\delta\)),相当于有向图中的边。我们通过输入的信息在这个有向图中转移,而这个有......
  • 《拉格朗日插值》小记
    随便学学,主要是又被卡科技了。参考文章:\(Alex\_Wei\)的拉格朗日插值与多项式乘法\(Alex\_Wei\)的多项式I:拉格朗日插值与快速傅里叶变换\(yyc\)的从拉插到快速插值求值算法介绍公式口糊主要用来对于一个给定的\(n\)次多项式,用\(n+1\)个点值在\(O(n^2)\)的时间复......
  • 23.9.29中秋小记
    这是我正式工作以来的第一个中秋。但好像我也没有很想家,没有思念的人。可能在我心中,家这个概念已经不存在了吧。究竟是从什么时候开始的呢?我也不知道虽然父母健在,他们也没有离婚,但是没有家了。......
  • 筛法求约数个数
    推荐视频:516筛法求约数个数点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintN=1e8+10;intp[N],cnt;intd[N];//d[i]记录i的约数的个数inta[N];//a[i]记录i的最小质因子的次数boolvis[N];voidget_d(intn){//筛法求......
  • 《prufer 序列》小记
    今天模拟赛被卡科技了,学一下这个东西,之前也看到很多次,只不过一直都没学。算法简介这是一种可以将带标号的树,转成唯一的整数序列表示的方法。而在“数树”题中也有大用。算法流程大概是将带标号的\(n\)个节点的数用\([1,n]\)中的\(n-2\)个整数来表示一个树。也可以理解成......
  • 莫比乌斯反演小记
    基本内容莫比乌斯函数\(\mu\)定义为\(1\)的逆。一些小性质:\(\mu*1=\epsilon\)\(\mu*\text{id}=\varphi\)反演内容我的理解是:\[[a=1]=\sum\limits_{d|a}\mu(d)\]典型例题例1P2398GCDSUM求\[\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)\]来推下式......
  • 数学筛法
    有的时候怕忘记,写篇小博客记录一下。线性筛素数inlinevoidinit(intn){for(inti=2;i<=n;i++){if(!vis[i])prime[++cnt]=i;for(intj=1;j<=cnt&&i*prime[j];j++){vis[i*prime[j]]=1;if(!(i%prime[j]))br......