莫比乌斯反演-小总结
这两天做了一些莫比乌斯反演的题,现在来稍微总结一下
双亲数
大意:
求
思路:
将d移到判断式的外面去,
原式=
加上莫比乌斯函数的性质
原式可以继续化为
改为枚举d,可以继续化成
注意到这里后面两坨东西我们是可以用分块来处理的,因为u(k)我们可以去处理出来,那么只要找到每一段相同区间里的u(k)函数的一段前缀和即可
关于莫比乌斯函数的预处理,可以通过欧拉筛来实现,这里贴个板子
void moblus()
{ memset(vis,0,sizeof vis);mu[1]=1; for(int i=2;i<=N;i++) { if(!vis[i]){p[++cnt]=i;mu[i]=-1;} for(int j=1;j<=cnt&&i*p[j]<=N;++j){ vis[i*p[j]]=1;if(i%p[j]==0){mu[i*p[j]]=0;break; } else mu[i*p[j]]=-mu[i]; } }
}
其它的就没什么好说的了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e6+10;
ll a,b,d;
ll ans=1;
//线性筛法求莫比乌斯函数
bool vis[N]; //标记
int p[N]; //质数
int mu[N];//打表结果
ll cnt=0;
void moblus()
{ memset(vis,0,sizeof vis);mu[1]=1; for(int i=2;i<=N;i++) { if(!vis[i]){p[++cnt]=i;mu[i]=-1;} for(int j=1;j<=cnt&&i*p[j]<=N;++j){ vis[i*p[j]]=1;if(i%p[j]==0){mu[i*p[j]]=0;//合数break; } else mu[i*p[j]]=-mu[i]; } }
}
ll f(ll n,ll m)
{n/=d;m/=d;ll ans=0;for(ll l=1,r=1;l<=min(n,m);l=r+1) {r=min(n/(n/l),m/(m/l));ans+=(mu[r]-mu[l-1])*(n/l)*(m/l);}return ans;
}int main()
{cin>>a>>b>>d;//ans=a/d*(b/d);moblus();ll n=min(a,b);for(int i=1;i<=n;++i) mu[i]+=mu[i-1];ans=f(a,b);cout<<ans<<endl;return 0;
}
再来一道狠一点的
P1390 公约数的和
大意:
思路:
如果要转到可以进行莫比乌斯反演的形式,我们可以先枚举i和j的公因子d
原式=
然后就可以转化为
=
那么如果我们令D=d*k的话,
原式可以继续改写为
中间那一坨很明显是可以转化成为欧拉函数的,
最后原式就等于
啊哈,这跟上一道题推出来的式子不是换汤不换药嘛,无非就是求莫比乌斯函数变成了求欧拉函数,基本代码完全没有上面区别
对了,因为这题求的是两两之间的数的公约数的和,不包括数字与数字本身,也不会重复计算,我们最后把这些多余的部分减掉就好了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e6+10;
ll n;
ll p[N];
ll phi[N];
bool vis[N];
ll cnt=0;
inline void init()
{phi[1]=1;for(register ll i=2;i<=n;++i){if(!vis[i]) p[++cnt]=i,phi[i]=i-1;for(register ll j=1;(j<=cnt)&&(i*p[j]<=n);++j){vis[i*p[j]]=1;if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}phi[i*p[j]]=phi[i]*(p[j]-1);}}for(ll i=1;i<=n;++i) phi[i]+=phi[i-1];
// for(int i=1;i<=n;++i) cout<<phi[i]<<' ';
}
inline void solve()
{ll ans=0;for(register ll l=1,r=1;l<=n;l=r+1){r=n/(n/l);ans+=(phi[r]-phi[l-1])*(n/l)*(n/l);}printf("%lld",(ans-n*(n+1)/2)/2);//cout<<(ans-n*(n+1)/2)/2<<endl;
}
int main()
{scanf("%lld",&n);init();solve();return 0;
}
莫比乌斯反演-小总结相关推荐
- 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛
F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...
- 小A的数学题(莫比乌斯反演数论)
小A的数学题(莫比乌斯反演&数论) 1.容斥 原始化简为 ∑ d = 1 n d 2 ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = d ] \sum\limi ...
- 【莫比乌斯反演】10.30破译密码
初涉的话先留坑吧 题目大意 $\sum_{i_1}^{a_1}\sum_{i_2}^{a_2}\cdots\sum_{i_m}^{a_m}(i_1,i_2,\cdots,i_m)$ $a_i<= ...
- 莫比乌斯反演入门题目(详细)
目录 luoguP2568 GCD hdu1695 GCD luogu3455[POI2007]ZAP-Queries luogu2522 [HAOI2011]Problem b P4318 完全平方 ...
- 专题·莫比乌斯函数与欧拉函数【including 整除分块,积性函数,狄利克雷卷积,欧拉函数,莫比乌斯函数,莫比乌斯反演
初见安~又是好久没写博客了--加上CSP才炸了一波. 目录 一.整除分块 题解 二.积性函数 三.狄利克雷卷积 四.欧拉函数 五.莫比乌斯函数(mu) 六.莫比乌斯反演 一.整除分块 看个例题:洛谷P ...
- 【笔记】莫比乌斯反演(1)
上一篇:莫比乌斯反演(0) 文章目录 莫比乌斯反演 关于反演 莫比乌斯函数 定义 性质 莫比乌斯反演公式 公式1 公式2 整除分块 引入 关于整除分块 基础推导 简单扩展 莫比乌斯反演的应用 例1:证 ...
- 离散数学/组合数学:序列与其对应的生成函数;多项式函数的系数与序列的联系;重复组合数的理解方法即----全1序列对应的生成函数做n重卷积(不严谨说法)之后得到的序列的x的k次方项的系数;莫比乌斯反演。
继我所写的文章 "迭代.递归.栈.差分方程之间的本质联系以及由推广的迭代法解决"变态青蛙跳台阶"问题" 结束之后,自然的引出一个问题,就是关于如果真的给定k项之 ...
- 数论变换 - 莫比乌斯反演篇
2020.8.17 今天第一次屁股坐在椅子上学莫比乌斯反演的一天.本来是想让队友学的,现在队友不知道换了多少人了,也没几个真的能靠得住的,还都得看自己.其实学到现在这个程度,除了一些极其吃天赋的问题, ...
最新文章
- ionic 混合应用开发
- 如何使用 controllerExtensions 给 SAP Fiori Elements List Report 的表格注册事件响应函数
- 单片机数字滤波算法如何实现?(附代码)
- 牛客题霸 [丑数] C++题解/答案
- hpux oracle9,oracle 9.2.0.8在HP-UX 11.31 下的安装步骤和注意事项
- 字节跳动大规模实践埋点自动化测试框架设计
- get请求和post请求乱码问题
- IOS UIImage
- paip.提升安全性--------用户密码控件方案总结
- excel图表模板免费下载_40个免费的信息图表模板下载
- 消费者生产者问题,哲学家问题
- BIP63(隐身地址)
- 【内部流出,勿做商用】今日教大家如何抢聚划算
- python中不同文件之间使用所谓的全局变量
- 期货开户手续费组成和最低价
- 超全园林 景观cc0高清摄影图片素材网站整理
- 测试用例设计——WEB通用测试用例(转)
- APP - 查询全国医院各科室排行榜(一)
- 软件工程网络15个人阅读作业2(201521123042 姚佳希)
- 线程生命周期 什么时候会出现僵死进程