莫比乌斯反演
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
完全平方数
题目链接:完全平方数首先可以想到二分。然后我们对于 2 的完全平方数来说,全部计算即可,3也同理。但是对于6来说,被计算了2次,所以需要减去。然后对于4来说,已经被2计算过了,跳过即可。其实我们不难发现,这就是莫比乌斯函数。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const i原创 2021-01-14 12:10:02 · 179 阅读 · 0 评论 -
HDU - 5468
题目链接:HDU - 5468有莫比乌斯反演我们可以得到,与某个数互质的数的公式:count[d]为d的倍数的个数。然后我们维护每个数倍数出现的次数即可,然后因为我们要知道子树当中的个数,每次递归的时候先记录递归这颗子树之前的个数,然后做减法。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace原创 2020-08-11 23:33:08 · 183 阅读 · 0 评论 -
小A的数学题
题目链接:小A的数学题比较naive的莫反题。考虑枚举gcd,然后提出来就ok了。然后gcd=d的形式,我们让区间同时除以d,变成gcd=1的形式做整除分块即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+10,mod=1e9+7;int n,m,u原创 2020-07-22 21:59:34 · 214 阅读 · 0 评论 -
Rinne Loves Sequence
题目链接:Rinne Loves Sequence对于区间互质的数个数我们可以用莫比乌斯反演得到:Σ mu[i] * cnt[i] * (cnt[i]-1) / 2mu[i] 为 i 的莫比乌斯函数,cnt[i] 为 i 出现的次数然后根据删除和添加就可以维护了。f(d) 为 gcd 恰好为 d 的数的对数, F(d) 为 gcd 为 d 的倍数的对数, μ(d) 表示莫比乌斯函数F(d) = ∑ f(n) 其中( n % d == 0 )莫比乌斯反演一下就可以得到, f(d) = ∑ μ(原创 2020-07-22 11:11:38 · 194 阅读 · 0 评论 -
[SDOI2015]约数个数和
题目链接:[SDOI2015]约数个数和这道题主要就是这个公式。如果我们知道这个公式了,然后直接反演一下,枚举约数d,预处理除法分块的前缀和即可。然后再对d除法分块。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longu...原创 2020-03-04 10:59:55 · 169 阅读 · 0 评论 -
[HAOI2011]Problem b
题目链接:[HAOI2011]Problem b如果a=1 && c=1 ,那么就是很简单的莫比乌斯反演了。现在不等于,我们可以考虑容斥答案为:calc(b,d)-calc(b,c-1)-calc(a-1,d)+calc(a-1,c-1)AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include&...原创 2020-03-03 20:56:03 · 133 阅读 · 0 评论 -
[POI2007]ZAP-Queries
题目链接:[POI2007]ZAP-Queries式子挺简单的,因为有T组,不能O(n)去计算。于是可以预处理μ的前缀和,反演时把每段n/i的值相等的部分一起算(即分块计算) 可以通过n/(n/i)找到值相等的一段的段末位置AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h&...原创 2020-03-03 20:43:07 · 215 阅读 · 0 评论