数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解...

莫比乌斯函数

定义函数\(\mu(n)\)为:

  1. 当n有平方因子时,\(\mu(n)=0\)。
  2. 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数。

性质1:

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

证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\)。

因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式定理得到原式\(=(-1+1)^{\omega(n)}=0\)。

但是\(n=1\)时,没有质因子,原式\(=\)$ 0\choose0$\(=1\)。

性质2:

\(\mu(n)\)是积性函数。

证明显然。

欧拉函数

定义函数\(\varphi(n)\)为:小于等于n的正整数中和n互质的数的个数。

那么根据欧拉函数的定义,再根据上面的性质,我们可以在\(O(\sqrt n)\)的时间内通过分解质因数得到\(\varphi(n)\)。

具体方法,对于每个不同的质因子,相当于把它在1-n中的倍数去掉,那么就有\(n*(1-\frac{1}{pi})\)个,连乘起来即可。

性质1:

对于质数p,\(\varphi(p)=p-1\)。

性质2:

对于质数p,\(\varphi(p^k)=(p-1)*p^{k-1}\)

证明:首先,对于$p|n,q< p,q\perp p \(,则\)q+pk\perp n$。

那么这就很显然了。

性质3:

\(\varphi\)是个积性函数。

根据定义式就能看出来。

性质4:

欧拉定理:对于互质的a,m有:\(a^{\varphi(m)} \equiv 1 \pmod {m}\)。

不会证明,自行百度。

性质5:

小于n且与n互质的正整数之和为\(\varphi(n)*n/2\)。

证明:首先,若\(p|n\),则\(n-p|n\)。

那么对于所有p,把它和n-p合到一起算,就是\(\varphi(n)*n\),最后除以2就行了,因为每对数算了两次。

对于n=1不适用。

性质6:

\(\sum\limits_{d|n} \varphi(d) = n\)

证明:

\(n=\sum_{i|n} \sum_{j=1}^n[gcd(j,n)=i]\)

\(=\sum_{i|n}\sum_{j=1}^{n/i}[gcd(j,n)=1]\)

\(=\sum_{i|n}\varphi(n/i)\)

\(=\sum_{i|n}\varphi(i)\)

得证。

其中第一句就是,把1-n中的数按照gcd进行分类并且计数。

狄利克雷卷积

定义卷积\((f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)

性质1:

两个积性函数的狄利克雷卷积还是积性函数。

证明:感性理解一下,两个互质的下标乘起来,相当于两个和式乘起来,因为是互质的相当于枚举到了乘积的所有约数,因为和式里面都是积性函数所以乘起来也是积性函数。

性质2:

三大运算规律:结合律,交换律,分配律。

感性理解一下就好啦。

然后给一点常用函数吧,杜教筛和莫比乌斯反演的时候有点用的。

  1. \(\mu(n)\),不解释了。
  2. \(\varphi(n)\),不解释了。
  3. \(\sigma(n)\),表示n的约数和。
  4. \(d(n)\),表示n的约数个数。
  5. \(e(n)\),等于\([n=1]\)。
  6. \(I(n)\),等于1。
  7. \(id(n)\),等于n。

其中后三个是完全积性函数。

然后给点公式吧。

\(\mu*I=e\)

\(\varphi*I=id\)

\(id*\mu=\varphi\)

\(I*I=d\)

\(I*id=\sigma\)

\(\varphi(n)=\mu*id \quad->\quad\frac{\varphi(n)}{n}=\sum_{d|n}\frac{\mu(d)}{d}\)

还有一些就不列举啦(其实是不会

线性筛

一种可以在\(O(n)\)时间内求一个积性函数在1-n的值的算法,顺便还可以求出1-n中的素数表。

因为保证了每个数只会被它的最小质因子筛到。

代码实现:

void getprime()
{
    for(int i=2;i<=n;i++)
    {
        if(!vis[i]) pri[++tot]=i,mu[i]=-1,phi[i]=i-1;
        for(int j=1;j<=tot&&i*pri[j]<=n;j++)
        {
            vis[i*pri[j]]=1;
            if(i%pri[j]==0)
            {
                mu[i*pri[j]]=0;
                phi[i*pri[j]]=phi[i]*pri[j];
                break;
            }
            mu[i*pri[j]]=-mu[i];
            phi[i*pri[j]]=phi[i]*(pri[j]-1);
        }
    }
}

就解释一句吧。

if(i%pri[j]==0){break;}

这一句是什么呢。质数表是递增的,如果i是pri[j]的倍数了,那么后面的i*pri[k]的最小质因子绝对不可能是pri[k],而在之后一定会被筛到,所以就要break掉了。

所以我们可以看出,这个i只是起到了枚举质数倍数几倍的作用,这就很清晰了。

然后一个积性函数f能够线性筛的话,需要满足的性质有:

1.对于质数p,\(f(p)\)能够快速计算。

2.对于n中出现过的一个质因子p,\(f(n*p)\)能够快速计算。

然后如果需要有辅助函数的话,辅助函数也一定要是积性函数,一般都是维护最小质因子的辅助函数,比如筛约数个数,那么我们维护最小质因子的出现次数就可以很容易计算啦。

莫比乌斯反演

已知\(F(n)=\sum_{d|n}f(d)\)

那么\(f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})\)。

证明:

\(F=f*I\)

\(F*\mu=f*I*\mu\)

\(F*\mu=f*e\)

\(F*\mu=f(n)\)

得证。

同理,已知\(F(n)=\sum_{n|d}f(d)\)

那么\(f(n)=\sum_{n|d}\mu(\frac{d}{n})\cdot F(d)\)

不过做题的时候用的最多的还是两种函数的性质,直接反演用的比较少啦。

杜教筛

杜教筛是一种可以在低于线性时间内计算一类积性函数前缀和的算法。

设\(S(n)=\sum_{i=1}^{n}f(i)\)

然后我们找一个积性函数\(g(i)\)

\((g*f)(i)= \sum_{d|i}g(d)f(\frac{i}{d})\)

\(\sum_{i=1}^{n}(g*f)(i)= \sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d})\)

和式变换一下

\(\sum_{d=1}^{n}g(d)\sum_{d|i}f(\frac{i}{d})\)

\(\sum_{d=1}^{n}g(d)\sum_{i=1}^{n/d}f(i)\)

\(\sum_{d=1}^ng(d)S(\frac{n}{d})\)

我们现在要求\(S(n)\)

然后发现,当\(d=1\)时,有个\(g(1)S(n)\)

那么我们提出来

\(g(1)S(n)=\sum_{i=1}^ng(i)S(\frac{n}{i})-\sum_{i=2}^ng(i)S(\frac{n}{i})\)

\(g(1)S(n)=\sum_{i=1}^n(g*f)(i)-\sum_{i=2}^ng(i)S(\frac{n}{i})\)

那么只要两个函数卷积的前缀和很好算,g的前缀和很好算,就可以直接记忆化了。

复杂度不会证,是\(O(\frac{3}{4}n)\)的,如果预处理前\(\frac{2}{3}n\)项的话,复杂度就变成了\(O(\frac{2}{3}n)\)。

那么如果要筛\(\mu\)的话,我们知道\(\mu\)和\(I\)的卷积十分好算,然后\(I\)的前缀和也很好算,可以试试:

\(S(n)=1-\sum_{i=2}^{n}S(\frac{n}{i})\)

对这就完了。

\(\varphi\)也挺简单的,和\(I\)卷积。

\(S(n)=\sum_{i=1}^{n}i-\sum_{i=2}^{n}S(\frac{n}{i})\)

对于不同的积性函数,配上一个好的g函数,能方便很多。

常见套路就是比如说有个\(i*f(i)\),那么我们拿id求个卷积,是不是i就被消掉了呢?

如果是\(i^2\)也可以考虑用\(g(i)=i^2\)来做卷积。

以此类推啦。

题目

挖个坑,待填

原文地址:https://www.cnblogs.com/CK6100LGEV2/p/10308116.html

时间: 2024-10-10 23:20:31

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛的相关文章

【数论】狄利克雷卷积及其快速计算方法及杜教筛

目录(假的 狄利克雷卷积基础知识 数论函数 狄利克雷卷积定义 狄利克雷卷积性质 常用卷积 卷积计算方法 最暴力的暴力 稍好的暴力 优美的暴力 莫比乌斯反演(待填坑) 杜教筛 经典杜教筛 第二种杜教筛 第三种杜教筛 背景 本人即将去CTS&APIO2019,由于一些特殊原因,发现自己数论突然变得很菜. 就决定在去的前一天,翻出来以前的数论学习资料看一看.翻到了czgj的校内狄利克雷卷积课件,发现其中提到了的任意数列\(f(n)\)和\(g(n)\)的狄利克雷卷积\((f*g)(n)\)(从1到n,

POJ 3358 Period of an Infinite Binary Expansion( 数论好题 + 欧拉定理 + 欧拉函数 )

POJ 3358 Period of an Infinite Binary Expansion( 数论好题 + 欧拉定理 + 欧拉函数 ) #include <cstdio> #include <cstring> #include <algorithm> #include <algorithm> using namespace std; typedef long long LL; LL fac[ 100000 ], pf; LL gcd( LL a, LL

【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数.他现在长大了,题目也变难了. 求如下表达式的值: 其中f(ij)表示ij的约数个数. 他发现答案有点大,只需要输出模1000000007的值. 输入 第一行一个整数n. 输出 一行一个整数ans,表示答案模1000000007的值. 样例输入 2 样例输出 8 题解 莫比乌斯反演+杜教筛 首先有个神奇

hdu1695(莫比乌斯)或欧拉函数+容斥

题意:求1-b和1-d之内各选一个数组成数对,问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个可以简化成1-b/k 和1-d/k 的互质有序数对的个数.假设b=b/k,d=d/k,b<=d.欧拉函数可以算出1-b与1-b之内的互质对数,然后在b+1到d的数i,求每个i在1-b之间有多少互质的数.解法是容斥,getans函数参数的意义:1-tool中含有rem位置之后的i的质因子的数的个数. 在 for(int j=rem;j<=factor[i

【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论

http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行的了. 首先我们要了解欧拉函数的几个性质和推论:(今天跟好基友Konjak魔芋讨论了好久..) 推论(一): phi(p^k)=(p-1)*p^(k-1) 证明: 令n=p^k,小于等于n的正整数数中,所有p的倍数共有p^k /p = p^(k-1)个. 1~n出去p的倍数,所以phi(n)= n -  p^

EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f(n,k)\)为满足要求的\(k\)元组个数,现在要求出\(\sum_{i=1}^n f(i,k),1\leq n\leq 10^9,1\leq k\leq 1000\). 思路: 首先来化简一下式子,题目要求的就是: \[ \begin{aligned} &\sum_{i=1}^n\sum_{j=1

【51Nod 1237】最大公约数之和 V3 莫比乌斯反演+杜教筛

题意 求$\sum_{i=1}^{n}\sum_{j=1}^{n}(i,j)$ 枚举约数 $$ \begin{align} ans &=\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[(i,j)=d] \ &=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[(i,j)=1] \ \end{align} $$ 利用

luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛

link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd恰好为1 然后就可以反演了 下面手误把所有的H都打成了R \(\sum_{i_1=L}^R\sum_{i_2=L}^R\dots\sum_{i_N=L}^R[\gcd(i_1,i_2,\dots,i_N)=1]\) \(\sum_{i_1=L}^R\sum_{i_2=L}^R\dots\sum_{i

[51nod1227]平均最小公倍数(莫比乌斯反演+杜教筛)

题意 求 $\sum_{i=a}^b \sum_{j=1}^i \frac{lcm(i,j)}{i}$. 分析 只需要求出前缀和, $$\begin{aligned}\sum_{i=1}^n \sum_{j=1}^i \frac{lcm(i,j)}{i} &= \sum_{i=1}^n \sum_{j=1}^i \frac{j}{gcd(i,j)} \\&= \sum_{d=1}^n \sum _{i=1}^n \sum_{j=1}^i \frac{j}{d} \cdot [gcd(i,j