欧拉函数 \(\varphi\)

\(\varphi(n)=\)表示不超过 \(n\) 且与 \(n\) 互质的正整数的个数
\[\varphi(n)=n\cdot \prod_{i=1}^{s}(1-\frac{1}{p_i})\]
其中 \(n = {p_1}^{\alpha1} \cdot {p_2}^{\alpha2} \cdots {p_s}^{\alpha s} \cdot\) 是 \(n\) 的标准分解。
由此易见 \(\text{Euler}\) 函数是积性函数。

线性求 \(\text{Euler}\) 函数:

#define int long long
int phi[3000005];
int n=3000000;
bool mark[3000005];
int prime[1000005];
int tot;
void getphi()
{phi[1]=1;for(int i=2;i<=n;i++){if(mark[i]==false){prime[++tot]=i;phi[i]=i-1;}for(int j=1;j<=tot;j++){if(i*prime[j]>n){break;}mark[i*prime[j]]=true;if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}phi[i*prime[j]]=phi[i]*phi[prime[j]];}}for(int i=1;i<=n;i++){phi[i]+=phi[i-1];}
}

\(\text{Mobius}\)函数 \(\mu(n)\)

\[ \mu(n)= \begin{cases} 1&n=1\\ 0&n\text{ 含有平方因子}\\ (-1)^k&k\text{ 为 }n\text{ 的本质不同质因子个数}\ \end{cases} \]
证明:
\[ \varepsilon(n)= \begin{cases} 1&n=1\\ 0&n\neq 1\ \end{cases} \]

其中 \(\displaystyle\varepsilon(n)=\sum_{d\mid n}\mu(d)\) 即 \(\varepsilon=\mu*1\)

设 \(\displaystyle n=\prod_{i=1}^k{p_i}^{c_i},n'=\prod_{i=1}^k p_i\)

那么 \(\displaystyle\sum_{d\mid n}\mu(d)=\sum_{d\mid n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^k\)

根据二项式定理,易知该式子的值在 \(k=0\) 即 \(n=1\) 时值为 \(1\) 否则为 \(0\) ,这也同时证明了 \(\displaystyle\sum_{d\mid n}\mu(d)=[n=1]\)

#define int long long
int mu[3000005];
int n=3000000;
bool mark[3000005];
int prime[1000005];
int tot;
void getmu()
{mu[1]=1;for(int i=2;i<=n;i++){if(mark[i]==false){prime[++tot]=i;mu[i]=-1;}for(int j=1;j<=tot;j++){if(i*prime[j]>n){break;}mark[i*prime[j]]=true;if(i%prime[j]==0){mu[i*prime[j]]=0;break;}mu[i*prime[j]]=-mu[i];}}
}

\(\text{Dirichlet}\)卷积

\(\text{ID}:\text{ID(i)=i}\)
\(\text{1}:\text{1(i)=1}\)
定义两个数论函数的\(\text{Dirichlet}\)卷积为:
\[(f*g)(n)=\sum_{d|n}({f(d)\times g(\frac{n}{d})}) \]
性质:\(\text{Dirichlet}\)卷积满足交换律和结合律。
单位元:\(\varepsilon\),\(\varepsilon(n)=[n==1]\),任何函数卷\(\varepsilon\)都为其本身.
\(1*\mu=\varepsilon\)
\(\mu * \text{ID} = \varphi\)
\(1*\text{ID}=\sigma\)

莫比乌斯反演

公式:设 \(f(n),g(n)\) 为两个数论函数。
如果有
\[ f(n)=\sum_{d\mid n}g(d) \]
那么有
\[ g(n)=\sum_{d\mid n}\mu(\frac{n}{d})f(d) \]
证明:
原命题等价于:已知 \(f=g*1\) ,证明 \(g=f*\mu\)
显然: \(f*\mu=g*1*\mu= g*\varepsilon=g\) (其中 \(1*\mu=\varepsilon\) )

同时,还有另一种\(\text{Mobius}\)反演:
如果有
\[ f(n)=\sum_{n\mid d}g(d) \]
那么有
\[ g(n)=\sum_{n\mid d}\mu(\frac{d}{n})f(d) \]

整除分块

当遇到形如
\[\sum_{i=1}^{n}\lfloor \frac{n}{i} \rfloor\]
的柿子时。
可以采用\(O(\sqrt {n})\)复杂度的算法:整除分块
易证:对于部分连续的\(i\),\(\frac{n}{i}\)的值是相同的,考虑把它们合并计算,可以发现发现对于每一个值相同的块,它的最后一个数是n/(n/i)
简略证明:\(\frac{n}{i}\)就是所求的值,设为\(x\),那么可证对于值\(x\),它所在的块的最后一个数是\(\frac{n}{x}\)。

  • 证明:反证法:对于数\(\frac{n}{x}+1\),它所在的块的值为\(\frac{n}{\frac{n}{x}+1}\),且\(\frac{n}{\frac{n}{x}+1}-x=\frac{x^2}{n+x}>0\)。$\therefore \text{数} \frac{n}{x}+1 \text{和数} \frac{n}{x} $ 不在同一个块中。
    然后,原命题得证。

所以,易得计算原式方法。

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

P2257 YY的GCD

设\(f(d)=\sum_{i=1}^{n}\sum_{i=1}^{m}[gcd(i,j)=d]\),
\(F(n)=\sum_{n\mid d}f(d)=\lfloor \frac{N}{n} \rfloor \times \lfloor \frac{M}{n} \rfloor\)
由莫比乌斯反演:\(f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)\)

\(Ans=\sum_{i=1}^{n}\sum_{i=1}^{m}[gcd(i,j)=prim]\)
\(=\sum_{p\in prim}\sum_{i=1}^{n}\sum_{i=1}^{m}[gcd(i,j)=p]\)
\(=\sum_{p\in prim}f(p)\)
\(=\sum_{p\in prim}\sum_{p|d}\mu(\frac{d}{p})F(d)\)
改为枚举\(\frac{d}{p}\):
\(Ans=\sum_{p\in prim}\sum_{d}^{min(\lfloor \frac{n}{p} \rfloor,\lfloor \frac{m}{p} \rfloor)}\mu(d)F(dp)\)
\(=\sum_{p\in prim}\sum_{d}^{min(\lfloor \frac{n}{p} \rfloor,\lfloor \frac{m}{p} \rfloor)}\mu(d) \times \lfloor \frac{N}{dp} \rfloor \times \lfloor \frac{M}{dp} \rfloor\)
设\(dp=T,t=p\)
\(Ans=\sum_{t\in prim}\sum_{d}^{min(\lfloor \frac{n}{t} \rfloor,\lfloor \frac{m}{t} \rfloor)}\mu(\frac{T}{t}) \times \lfloor \frac{N}{T} \rfloor \times \lfloor \frac{M}{T} \rfloor\)
\(=\sum_{T=1}^{min(n,m)}\sum_{t\in prim,t|T}\mu(\frac{T}{t}) \times \lfloor \frac{N}{T} \rfloor \times \lfloor \frac{M}{T} \rfloor\)
\(=\sum_{T=1}^{min(n,m)}(\lfloor \frac{N}{T} \rfloor \times \lfloor \frac{M}{T} \rfloor) \times \sum_{t\in prim,t|T}\mu(\frac{T}{t})\)

代码:
//sum即为\(\sum_{t\in prim,t|T}\mu(\frac{T}{t})\)的前缀和

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int prime[10000005];
int mu[10000005];
ll f[10000005];
ll sum[10000005];
bool vis[10000005];
int cnt;
void init()
{mu[1]=1;for(int i=2;i<=10000000;i++){if(vis[i]==false){mu[i]=-1;prime[++cnt]=i;}for(int j=1;j<=cnt&&i*prime[j]<=10000000;j++){vis[i*prime[j]]=true;if(i%prime[j]==0){break;}mu[i*prime[j]]=-mu[i];}}for(int i=1;i<=cnt;i++){for(int j=1;j*prime[i]<=10000000;j++){f[j*prime[i]]+=mu[j];}}for(int i=1;i<=10000000;i++){sum[i]=sum[i-1]+f[i];}
}
ll solve(int a,int b)//运用整除分块
{ll ans=0;if(a>b){swap(a,b);}for(int l=1,r=0;l<=a;l=r+1){r=min(a/(a/l),b/(b/l));ans+=(ll)(sum[r]-sum[l-1])*(a/l)*(b/l);}return ans;
}
signed main()
{init();int T;cin>>T;for(int i=1;i<=T;i++){int a,b;scanf("%d %d",&a,&b);printf("%lld\n",solve(a,b));}return 0;
}

常用柿子(待补充)

\[[\gcd(x,y)=1]=\sum_{d|x,d|y}\mu(d)\]

转载于:https://www.cnblogs.com/wasa855/p/10392439.html

关于Mobius反演相关推荐

  1. SPOJ PGCD (mobius反演 + 分块)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :求满足gcd(i , j)是素数(1 &l ...

  2. Mobius反演学习

    这篇文章参考了许多资料和自己的理解. 先放理论基础. 最大公约数:小学学过,这里只提一些重要的公式: $·$若$a=b$,则$\gcd(a,b)=a=b$: $·$若$\gcd(a,b)=d$,则$\ ...

  3. Mobius反演和筛法

    Mobius反演和筛法 前置知识:积性函数.Dirichlet卷积.莫比乌斯函数.数论分块 积性函数 定义: 1.若f(n)的定义域为正整数域,值域为复数,即f: Z^+ →C,则f(n)为数论函数: ...

  4. P1447 [NOI2010]能量采集(mobius反演)

    P1447 [NOI2010]能量采集 式子化简 显然题目就是要我们求∑i=1n∑j=1m2gcd(i,j)−1\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} 2gcd(i, ...

  5. Mobius反演总结

    刷了一些浅显的反演题目, 做一个总结 知识点1 给定n个数(可以是1-n), 求有多少数与x互质 f(x)=∑d|xu[d]∗cnt[d] f(x) = \sum_{d|x}u[d]*cnt[d] 其 ...

  6. Mobius反演方法

    <更新提示> 前置知识:建议有一点DirichletDirichletDirichlet卷积的基础,会线性筛求积性函数.本文可能会持续更新. 可以看我以前在博客园的博客. <正文&g ...

  7. Bzoj-2820 YY的GCD Mobius反演,分块

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题意:多次询问,求1<=x<=N, 1<=y<=M且gcd( ...

  8. P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 推导过程 ∑i=1n∑j=1mlcm(i,j)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} lcm(i, j ...

  9. P3327 [SDOI2015]约数个数和 (mobius反演)

    P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij ...

最新文章

  1. 一起学并发编程 - 简易线程池实现
  2. EPSON机器人SPLE+语言_简单实例
  3. 个人的博客搭建(持续更新)
  4. base64_encode() 和 base64_decode() 8bit图片通过网络传输
  5. Python协程之greenlet
  6. 【CC2530入门教程-01】CC2530微控制器开发入门基础
  7. Adams— 系统级多体动力学仿真平台
  8. 软件工程Java毕设 SSM药品管理系统(含源码+论文)
  9. 开发嵌入式软件构建管道
  10. summery 总结篇 访问对象属性的方法
  11. 父母生命末期,是在医院昂贵痛苦地治疗,还是接老人回家亲情陪伴
  12. utf-8的英文字母和中文汉字是一个字符占几个字节
  13. No qualifying bean of type ‘com.bruceliu.mapper.UserMapper‘
  14. 使用OpenCV库函数将图片合成视频
  15. 对于java的初步认识
  16. android 新闻频道,GitHub - xiyy/TopNews: 一款Android新闻客户端,并提供电视台直播功能...
  17. 新颖的自我介绍_非常有创意的自我介绍
  18. Qt5之QLCDNumber
  19. 2023 ChatGPT镜像替代网站 无需注册打开就能体验
  20. linux usb音频,audio - 如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频 - 堆栈内存溢出...

热门文章

  1. html_三种常见格式的特点
  2. js生成token 七牛云_自己尝试生成七牛云的accessToken,但一直返回{error:bad token}...
  3. PPT中如何制作两圆交叉阴影图
  4. 荣品-i.MX6Q开发板 飞思卡尔iMX6Q开发板 工业级开发板
  5. SUSE配置zypper
  6. BGP路径属性与选路原则
  7. Java中获取日期和时间
  8. 基于特征匹配的英文印刷字符识别代码自己的注释
  9. 个人支付收款方案-PayJS
  10. 100 个网络基础知识,全部掌握顶半个网络高手