积性函数

积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数。

特别地,若所有的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b),则称这个函数 f(x)f(x)f(x) 是 完全积性函数

常见积性函数及其性质

  1. Mobius 函数。∀n∈N∗\forall n\in\N^*∀n∈N∗ 有 μ(n)={1,n=1(−1)k,n=∏i=1kpk,0,otherwise.\mu(n)=\begin{cases}1,n=1\\
    (-1)^k,n=\prod_{i=1}^{k}{p_k},\\
    0,\text{otherwise.}\end{cases}μ(n)=⎩⎪⎨⎪⎧​1,n=1(−1)k,n=∏i=1k​pk​,0,otherwise.​

    其中 ppp 是互不相同的素数;

  2. Euler 函数。φ(n)\varphi(n)φ(n) 表示不大于 nnn 的、与 nnn 互素的数的个数;

  3. 约数个数函数。d(n)d(n)d(n) 表示 nnn 的约数个数;

  4. 约数和函数。σ(n)\sigma(n)σ(n) 表示 nnn 的约数之和。

完全积性函数
  1. 元函数。ϵ(x)=[x=1]\epsilon(x)=[x=1]ϵ(x)=[x=1]。

  2. 恒等函数。I(x)=1I(x)=1I(x)=1。所谓恒等就是函数值恒等于 111。

  3. 单位函数。id(n)=nid(n)=nid(n)=n。

Dirichlet (狄利克雷)卷积

两个数论函数 f(x),g(x)f(x),g(x)f(x),g(x) 的 Dirichlet 卷积h(x)=(f∗g)(x)=∑d∣xf(d)g(xd)h(x)=(f*g)(x)=\sum_{d|x}f(d)g(\frac xd)h(x)=(f∗g)(x)=d∣x∑​f(d)g(dx​)

显然,Dirichlet 卷积满足交换律、结合律、分配律。而且有f∗ϵ=ff*\epsilon=ff∗ϵ=f

Mobius 函数的性质

∀n∈N∗\forall n\in\N^*∀n∈N∗ 有 ∑d∣nμ(d)=ϵ(n)\sum_{d|n}\mu(d)=\epsilon(n)d∣n∑​μ(d)=ϵ(n)即μ∗I=ϵ\mu*I=\epsilonμ∗I=ϵ

Euler 函数的性质

∀n∈N∗\forall n\in\N^*∀n∈N∗ 有 ∑d∣nφ(d)=n\sum_{d|n}\varphi(d)=nd∣n∑​φ(d)=n即φ∗I=id\varphi*I=idφ∗I=id

Mobius 反演

Mobius 反演(莫比乌斯反演) 是数论数学中很重要的内容,可以用于解决很多组合数学的问题。

结论 设 f,gf,gf,g 为数论函数,且 f=∑d∣ng(d)f=\sum_{d|n}g(d)f=d∣n∑​g(d)则g=∑d∣nμ(d)f(nd)g=\sum_{d|n}\mu(d)f(\frac nd)g=d∣n∑​μ(d)f(dn​)

证明: 易知f=g∗If=g*If=g∗I

左右两边同时卷上 μ\muμ,得f∗μ=g∗I∗μf*\mu=g*I*\muf∗μ=g∗I∗μ

因为 μ∗I=ϵ\mu*I=\epsilonμ∗I=ϵ,则有f∗μ=gf*\mu=gf∗μ=g即g=∑d∣nμ(d)f(nd)g=\sum_{d|n}\mu(d)f(\frac nd)g=d∣n∑​μ(d)f(dn​)原命题得证。



事实上,我们做题的时候主要用以下形式。

若F(x)=∑x∣df(d)F(x)=\sum_{x|d}f(d)F(x)=x∣d∑​f(d)则有f(x)=∑x∣dμ(dx)F(d)f(x)=\sum_{x|d}\mu(\frac dx)F(d)f(x)=x∣d∑​μ(xd​)F(d)证明与上类似,此略。

杜教筛

杜教筛 是在低于线性的时间复杂度,求一个积性函数前缀和的算法。

(找不到定义,只好自己编一个)

和式的推导

今需计算积性函数 f(x)f(x)f(x) 的前缀和S(n)=∑i=1nf(i)S(n)=\sum_{i=1}^{n}{f(i)}S(n)=i=1∑n​f(i)

为了解决这个问题,构造积性函数 g(x),h(x)g(x),h(x)g(x),h(x) 使f∗g=hf*g=hf∗g=h

则∑i=1nh(x)=∑i=1nf(x)∗g(x)=∑i=1n∑d∣nf(d)g(nd)=∑d=1ng(d)⋅∑i=1⌊nd⌋f(i)=∑d=1ng(d)⋅S(⌊nd⌋)=g(1)⋅S(n)+∑d=2ng(d)⋅S(⌊nd⌋)\begin{aligned}\sum_{i=1}^{n}h(x)&=\sum_{i=1}^{n}f(x)*g(x)\\
&=\sum_{i=1}^{n}\sum_{d|n}f(d)g(\frac nd)\\
&=\sum_{d=1}^{n}g(d)·\sum_{i=1}^{\lfloor\frac nd\rfloor}{f(i)}\\
&=\sum_{d=1}^n{g(d)}·S(\lfloor\frac nd\rfloor)\\
&=g(1)·S(n)+\sum_{d=2}^{n}g(d)·S(\lfloor\frac nd\rfloor)\end{aligned}i=1∑n​h(x)​=i=1∑n​f(x)∗g(x)=i=1∑n​d∣n∑​f(d)g(dn​)=d=1∑n​g(d)⋅i=1∑⌊dn​⌋​f(i)=d=1∑n​g(d)⋅S(⌊dn​⌋)=g(1)⋅S(n)+d=2∑n​g(d)⋅S(⌊dn​⌋)​

所以g(1)⋅S(n)=∑i=1nh(i)−∑d=2ng(d)⋅S(⌊nd⌋)g(1)·S(n)=\sum_{i=1}^{n}{h(i)}-\sum_{d=2}^{n}{g(d)·S(\lfloor\frac nd\rfloor)}g(1)⋅S(n)=i=1∑n​h(i)−d=2∑n​g(d)⋅S(⌊dn​⌋)

那么问题来了,g,hg,hg,h 到底取什么呢?

例 1

求S(n)=∑i=1nμ(i)S(n)=\sum_{i=1}^{n}{\mu(i)}S(n)=i=1∑n​μ(i)



由上面的套路,得g(1)⋅S(n)=∑i=1nh(x)−∑d=2ng(d)⋅S(⌊nd⌋)g(1)·S(n)=\sum_{i=1}^{n}{h(x)}-\sum_{d=2}^{n}{g(d)·S(\lfloor\frac nd\rfloor)}g(1)⋅S(n)=i=1∑n​h(x)−d=2∑n​g(d)⋅S(⌊dn​⌋)

因为 μ∗I=ϵ\mu*I=\epsilonμ∗I=ϵ,所以不妨令 g=I,h=ϵg=I,h=\epsilong=I,h=ϵ 得

I(1)⋅S(n)=∑i=1nϵ(x)−∑d=2nI(d)⋅S(⌊nd⌋)S(n)=1−∑d=2nS(⌊nd⌋)\begin{aligned}I(1)·S(n)&=\sum_{i=1}^{n}{\epsilon(x)}-\sum_{d=2}^{n}{I(d)·S(\lfloor\frac nd\rfloor)}\\
S(n)&=1-\sum_{d=2}^{n}{S(\lfloor\frac nd\rfloor)}\end{aligned}I(1)⋅S(n)S(n)​=i=1∑n​ϵ(x)−d=2∑n​I(d)⋅S(⌊dn​⌋)=1−d=2∑n​S(⌊dn​⌋)​

例 2

求S(n)=∑i=1nφ(i)S(n)=\sum_{i=1}^{n}{\varphi(i)}S(n)=i=1∑n​φ(i)

容易想到φ∗I=id\varphi*I=idφ∗I=id

由上面的套路得S(n)=∑i=1ni−∑d=2nS(⌊nd⌋)S(n)=\sum_{i=1}^{n}{i}-\sum_{d=2}^{n}{S(\lfloor \frac nd\rfloor)}S(n)=i=1∑n​i−d=2∑n​S(⌊dn​⌋)

luogu 杜教筛模板

luogu P4213

#include<cstdio>
#include<cstdlib>
#include<cstring> #define reg register
typedef long long ll;
const int MAXN=5000010;
const int MOD=15e5+7; int T,n;
bool vis[MAXN];
int p[MAXN];
int phi[MAXN];
int mu[MAXN];
ll S_phi[MAXN];
int S_mu[MAXN];
int Hmu[MOD+10];
ll Hphi[MOD+10];
int len=0; void init(){
memset(vis,1,sizeof(vis));
vis[0]=vis[1]=0;phi[1]=mu[1]=1;
for(reg ll i=2;i<=MAXN;++i){
if(vis[i]){
p[++len]=i;
phi[i]=i-1;
mu[i]=-1;
}
for(reg int j=1;j<=len&&(i*p[j]<=MAXN);++j){
vis[i*p[j]]=0;
if(i%p[j]!=0){
phi[i*p[j]]=phi[i]*(p[j]-1);
mu[i*p[j]]=-mu[i];
}
else{
phi[i*p[j]]=phi[i]*p[j];
mu[i*p[j]]=0;
break;
}
}
}
S_phi[0]=S_mu[0]=0;
for(reg int i=1;i<=MAXN;++i){
S_phi[i]=S_phi[i-1]+phi[i];
S_mu[i]=S_mu[i-1]+mu[i];
}
}
ll Sphi(int x){
if(x<MAXN) return S_phi[x];
if(Hphi[x%MOD]) return Hphi[x%MOD];
ll sum=0;
for(int l=2,r;l<=x;l=r+1){
r=x/(x/l);
sum+=Sphi(x/l)*(r-l+1);
}
ll s=(1ll+x)*x/2;
return Hphi[x%MOD]=s-sum;
}
int Smu(int x){
if(x<MAXN) return S_mu[x];
if(Hmu[x%MOD]) return Hmu[x%MOD];
ll sum=0;
for(int l=2,r;l<=x;l=r+1){
r=x/(x/l);
sum+=Smu(x/l)*(r-l+1);
}
return Hmu[x%MOD]=1-sum;
}
int main(){
init();
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%lld %d\n",Sphi(n),Smu(n));
}
}

Mobius 反演与杜教筛的更多相关文章

  1. 我也不知道什么是"莫比乌斯反演"和"杜教筛"

    我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的 ...

  2. 【BZOJ3930】选数(莫比乌斯反演,杜教筛)

    [BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...

  3. 【BZOJ4652】【NOI2016】循环之美(莫比乌斯反演,杜教筛)

    [BZOJ4652]循环之美(莫比乌斯反演,杜教筛) 题解 到底在求什么呢... 首先不管他\(K\)进制的问题啦,真是烦死啦 所以,相当于有一个分数\(\frac{i}{j}\) 因为值要不相等 所 ...

  4. 【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)

    [Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\( ...

  5. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  6. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  7. LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]

    传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...

  8. [CQOI2015]选数(莫比乌斯反演,杜教筛)

    [CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...

  9. 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

随机推荐

  1. win下的mongodb安装和基础操作

    一.下载地址: https://www.mongodb.com/download-center/community 二.安装错误: 1.安装过程中报错(类似下图): 原因:没有管理员权限 解决:管理员 ...

  2. mysql8.0版本忘记root密码

    1.先关掉系统服务 net stop mysql 2.进入mysql安装目录的bin文件中,以管理员的方式运行cmd,然后输入如下命令,实现无密码登陆 mysqld --console --skip- ...

  3. Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码

    在文章:Mybatis源码解析,一步一步从浅入深(一):创建准备工程,中我们为了解析mybatis源码创建了一个mybatis的简单工程(源码已上传github,链接在文章末尾),并实现了一个查询功能 ...

  4. 客户端与服务端的事件watcher源码阅读

    watcher存在的必要性 举个特容易懂的例子: 假如我的项目是基于dubbo+zookeeper搭建的分布式项目, 我有三个功能相同的服务提供者,用zookeeper当成注册中心,我的三个项目得注册 ...

  5. 连接电脑时,无法启用USB调试

    原因: 手机悬浮球 解决方案: 取消悬浮球,停止一切悬浮应用 (下面的废话可以不听) 预置条件: 手机已经打开开发者模式 开启USB调试模式 电脑能检测到手机 故事背景: 经常用手机连接电脑进行adb ...

  6. Ubuntu+docker+gitlab安装和使用

    以前自己写的代码都是在本地,因为都是自己一个人维护,现在交给团队维护了,所以想着搭建一个gitlab 1,拉镜像 安装非常简单 docker search gitlab  搜索镜像 docker pu ...

  7. filebeat使用multiline丢失数据问题

    最近部署filebeat采集日志. 发现配置multiline后,日志偶尔会丢失数据,而且采集到的数据长度都不相同,所以和日志长度没有关系. 查阅filebeat官网后,找到了问题.filebeat有 ...

  8. JAVA Atm测试实验心得

    通过一个假期的自学,完成了老师布置的样卷任务.使用Escipse编写一个学生成绩的管理系统. 一开始两眼摸黑,通过观看Java课程的视频,地址:https://www.bilibili.com/vid ...

  9. 快速入门和使用HTML–使用Django建立你的第一个网站

    一 前记 你每天浏览的网页,通过网络看的新闻,看着淘宝京东的绚丽多彩的界面.是否想过这个问题,它是怎么实现的呢?有没有搜过相关的知识呢?假如没有,假如你是一位对事物好奇的主或者是做计算机相关东西的人. ...

  10. 2019-2020-1 20199303 《Linux内核原理分析》 第一周作业

    2019-2020-1 20199303 <Linux内核原理分析> 第一周作业 1. 环境准备 在众多的Linux发行版中,Ubuntu,小红帽还有类Unix系统的BSD系统,我选择了目 ...