天码

经典数论容斥,只不过这里从二维的变成了四维的

cnt[d]表示给出的序列中约数有d的数的个数

这里用到一个引理:一堆数的最大公约数一定是他们公约数的倍数

这个证明其实非常简单,从分解质因数的角度考虑,遍历一遍数列并且对质因数的个数取min,那么约数的集合肯定就是在这里面选,个数不能超过min的,肯定能整除呀

所以上面枚举的减掉的东西只用枚举kd

再考虑一下,这些四元组里面,如果gcd不为d,根据上面的引理,由于他们有公共约数d,所以gcd一定也是d的倍数,所以不重不漏了

update 2024.8.10

重新做一遍,由于这道题目放在容斥原理的,所以想容斥原理了,而且很轻易地想出来了,但是会TLE,然而却对蓝书的莫比乌斯函数有了更深的理解

先考虑一般的容斥原理怎么做:设Pi表示四元组的最大公约数是第i个质数(从小到大排序)的性质,则我们现在要求的就是|P1P2...|,这个直接用容斥原理打开就好了。但是会发现这里的质数太多了,如果我们直接用容斥原理是会超时的,这个时候就要用到莫比乌斯函数了

想一下为什么我们的容斥原理会超时,原因就是很多质数乘起来直接超过了上界的我们却还要去遍历一遍,蓝书的思路就是减去这些重复遍历

具体来说,设D[i]表示有多少个四元组的最大公约数是i的倍数(注意i不一定要是质数),显然这个可以用倍数法处理掉,时间复杂度为调和级数,那么这道题的答案ans就为i=1Nu(i)D[i],这是因为对于一个i,如果其是square-free-number且质因数分解刚好有奇数个,那么在对应的容斥原理公式里面就应该是加,如果其是square-free-number且质因数分解刚好有偶数个,那么在对应的容斥原理公式里面就应该是减;上述操作由于最多只会循环到N,就砍掉了无用的枚举,且不会漏掉计数

所以以后我们如果对质因数用容斥原理发现会TLE的话,就可以尝试莫比乌斯函数

posted @   最爱丁珰  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示