
莫比乌斯反演
Lynstery
一只蒟蒻
展开
-
[二分+容斥+莫比乌斯函数] BZOJ2440: [中山市选2011]完全平方数
题意求从小到大第k个无平方因子数是多少。(原题面表述略有问题) k<=1e+9题解这题与反演无关,就用到了莫比乌斯函数。 首先肯定二分答案然后验证,现在问题转化为了求[1,mid]中无平方因子数的个数。 怎么求呢?考虑容斥,(p是1~sqrt(m)内的质数集) 总个数=[(pi)2的倍数]−[(pi∗pj)2的倍数]+[(pi∗pj∗pk)2的倍数]−[(pi∗pj∗pk∗pt)2的倍数].原创 2017-07-02 16:36:26 · 467 阅读 · 2 评论 -
[容斥 反演] 51nod1678 lyk与gcd
反演… ∑j[gcd(i,j)==1]∗a[j]=∑j∑k|i,k|jμ(k)∗a[j]=∑k|iμ(k)∑ja[k∗j] \sum_{j}[gcd(i,j)==1]*a[j]=\sum_{j} \sum_{k|i,k|j} \mu(k) *a[j]=\sum_{k|i} \mu(k) \sum_{j} a[k*j] 设 g[k]=∑k|ja[j]g[k]=\sum_{k|j} a[j]原创 2017-10-18 15:52:30 · 411 阅读 · 0 评论 -
[莫比乌斯反演] BZOJ4816: [Sdoi2017]数字表格
挺简单的。。。 ∏i=1n∏j=1mfib[gcd(i,j)]=∏dfib[d]∑ni∑mj[gcd(i,j)==d]\prod_{i=1}^n \prod_{j=1}^m fib[gcd(i,j)]=\prod_d fib[d]^{\sum_i^n \sum_j^m [gcd(i,j)==d]} 上面这个指数是经典的反演的问题,然后就变成: ∏dfib[d]∑kμ(k)⌊ndk⌋⌊mdk⌋原创 2017-09-28 15:13:29 · 353 阅读 · 0 评论 -
[莫比乌斯反演+莫队] HDU4676 Sum Of Gcd
反演的过程类似这题 ,得 ∑T=1nϕ(T) cnt[T]2 \sum_{T=1}^n \phi(T)\ cnt[T] ^2 cnt[T]cnt[T] 表示当前区间内是 TT 的倍数的数的个数。 因为有 cntcnt,每次直接求肯定不行,可以想到莫队。移动过程中每次暴力维护 cntcnt 即可。 复杂度理论很大,但实际上能过。#include<cstdio>#include<cmath>原创 2017-09-28 13:08:09 · 502 阅读 · 0 评论 -
[莫比乌斯反演] BZOJ1101: [POI2007]Zap
随手点到这个漏掉的裸题,水一发…#include<cstdio>#include<algorithm>using namespace std;const int maxn=50005;typedef long long LL;int n,N=50000,p[maxn],mu[maxn];bool vis[maxn];void get_mu(){ mu[1]=1; fo原创 2017-09-27 21:22:31 · 335 阅读 · 0 评论 -
[莫比乌斯反演] 51Nod 1355 斐波那契的最小公倍数
http://blog.youkuaiyun.com/ZLH_HHHH/article/details/77587832 现在我自己推不出来,看题解的。 大概是考虑用经典的容斥写出答案的式子,考虑每个数对答案的贡献,然后用反演算出贡献的式子。#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;cons原创 2017-09-23 21:15:16 · 447 阅读 · 0 评论 -
[莫比乌斯反演] HDU6053: [2017 多校-第2场] TrickGCD
题意给出一个长度为n的数列A,求有多少个不同的长度为n的B数列满足下列限制: 1≤Bi≤Ai1 \le B_i \le A_i For each pair(L,R)(1≤L≤R≤n),gcd(BL,BL+1,...,BR)≥2For \ each \ pair( L , R ) (1 \le L \le R \le n), \quad gcd(B_L,B_L+1,...,B_R)≥2 n,ai原创 2017-07-28 14:49:39 · 3158 阅读 · 0 评论 -
[杜教筛+莫比乌斯反演] 51Nod1238: 最小公倍数之和 V3
题意求∑ni=1∑nj=1lcm(i,j)\sum_{i=1}^n \sum_{j=1}^n lcm(i,j) n≤1010n \le 10^{10}题解自己推到后面就不会了,然后去找题解…… 大概就是 ∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]i∗j∗d2d\sum_{i=1}^n \sum_{j=1}^n \frac{ij}原创 2017-07-07 12:54:55 · 778 阅读 · 0 评论 -
[莫比乌斯反演+杜教筛] 51Nod1237: 最大公约数之和 V3
题意求∑ni∑njgcd(i,j)\sum_i^n\sum_j^ngcd(i,j) n≤1010n\le10^{10}题解∑in∑jngcd(i,j)=∑d=1n∑i=1n∑j=1n[gcd(i,j)=d]∗d=∑d=1n∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]∗d\sum_i^n\sum_j^ngcd(i,j)=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}原创 2017-07-04 22:38:04 · 744 阅读 · 2 评论 -
[杜教筛+莫比乌斯反演] HDU5608: function
题意题解我们设 g(i)=i2−3i+2g(i)=i^2-3i+2,题目告诉我们的就是 g=f∗1g=f*1。然后就可以根据杜教筛的思路搞了: ∑i=1ng(i)=∑i=1n∑d|if(d)=∑i=1n∑d⌊ni⌋f(d)=∑i=1nS(⌊ni⌋)\sum_{i=1}^ng(i)=\sum_{i=1}^n \sum_{d|i}f(d)=\sum_{i=1}^n\sum_d^{\lfloor\fra原创 2017-07-04 21:01:02 · 395 阅读 · 2 评论 -
[莫比乌斯反演+数状数组] BZOJ3529: [Sdoi2014]数表
题意有一张N×m的数表,其第i行第j列(1 <=i <=n,1 <=j <=m)的数值为 能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。 多次询问,输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a| < =10^9)描述一组数据。 n,m,Q <=10^5 题解设g(i)为gcd(x,y)等于i的数对个数(x<=n,y<=m),原创 2017-07-03 11:49:04 · 413 阅读 · 2 评论 -
[莫比乌斯反演+容斥+分块求和] BZOJ2301: [HAOI2011]Problem b
莫比乌斯反演经典入门题。 首先用容斥,把问题转化为1<=x<=n且1<=y<=m的。 设f(i)f(i) 表示满足gcd(x,y)等于i的有序数对(x,y)的个数。(1<=x<=n且1<=y<=m) 构造F(i)=∑i|df(d)F(i)=\sum_{i|d}f(d),即满足i|gcd(x,y)的有序数对(x,y)的个数。 F(i)F(i)很好求,只有x和y都是i的倍数即可,所以F(i)=⌊原创 2017-07-02 16:39:12 · 607 阅读 · 2 评论 -
[莫比乌斯反演+分块求和] BZOJ2820: YY的GCD
题意给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对。 T(组数) = 10000 N,M<=10000000题解如果我们枚举质数p=gcd(x,y)p=gcd(x, y),然后反演: 设f(i)f(i)表示满足gcd(x,y)gcd(x,y)等于ii的有序数对(x,y)(x,y)的个数。 F(i)=∑i|df(d)=⌊ni⌋⌊mi⌋F(i)=原创 2017-07-02 17:15:46 · 960 阅读 · 4 评论 -
[反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
不错的题。我们就是要解决小于n的合法的数有几个。有个套路就是考虑最高的和 nn 不一样的位,后面就随便填了,可以枚举一下统计答案。现在只需要算这样一个东西:f[i][j]f[i][j] 表示数字共 ii 位,最高位是 jj 的合法方案。推式子就好啦 f[i][j]=∑k=1P−1[gcd(j,k)=1]f[i−1][k]f[i][j]=\sum_{k=1}^{P-1} [gcd(j,k)=1]f原创 2017-10-03 22:05:28 · 441 阅读 · 0 评论