BZOJ 2301 Problem b (莫比乌斯反演+区间容斥+分块)
2017-08-11 20:22
288 查看
思路:
这个题算是bzoj 1695的加强版吧,同样是给你a,b,c,d,k五个数,只不过这次a和c都不一定是1了。那么我们需要进行区间的容斥定理(注意端点值)。同时由于数据量很大,我们还需要分块。容斥: fanyan(b,d)−fanyan(a−1,d)−fanyan(b,c−1)+fanyan(a−1,c−1)
分块方法:
对于区间(1,a)和(1,b),求gcd(i,j)==k的数对的个数。
int minab = min(a,b),l; a/=k,b/=k; for(int i = 1;i <= minab;i=l+1){ l = min(a/(a/i),b/(b/i));//注意,这个方法必须是在i连续的情况下,所以才有了a/=k,b/=k。 ans += (sum[l]-sum[i-1]) * (a/i) * (b/i);//sum[i] 为μ(i)的前缀和。 }
所以本题也就迎刃而解了。
#include<stdio.h> #include <iostream> #include<string.h> #include<math.h> #include<algorithm> #define eps 1e-8 typedef long long int lli; using namespace std; const int maxn = 5e4+20; bool isprime[maxn]; //int phi[maxn]; int prime[maxn],miu[maxn]; //int cnt[maxn];质因数的个数 8:2*2*2 3个 void moblus(){ int num = 0;miu[1] = 1; for(lli i = 2;i < maxn;i++){ if(!isprime[i]){ prime[num++] = i,miu[i] = -1;//phi[i] = i-1; //cnt[i] = 1; } for(lli j = 0;j < num && i*prime[j] < maxn;j++){ lli x = prime[j]; isprime[i*x] = 1;//cnt[i*x] = cnt[i]+1; if(i%x){ miu[i*x] = -miu[i]; //phi[i*x] = phi[i] * phi[x]; } else{ miu[i*x] = 0; //phi[i*x] = phi[i] * x; break; } } } } int sum[maxn]; lli fy(lli n,lli m,lli k){ lli ans = 0,l; if(n>m) swap(n,m); n/=k;m/=k; for(lli i = 1;i <= n;i=l+1){ l = min(n/(n/i),m/(m/i)); ans += (lli)(sum[l]-sum[i-1])*(n/i)*(m/i); } return ans; } int main(){ moblus(); for(int i = 1;i <= maxn;i++){ sum[i] = sum[i-1]+miu[i]; } int q,n,a,b,c,d,k; scanf("%d",&q); while(q--){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); lli ans = 0; ans = fy(b,d,k) + fy(a-1,c-1,k) - fy(b,c-1,k) - fy(a-1,d,k); printf("%lld\n",ans); } return 0; }
相关文章推荐
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演,分块,容斥)
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
- bzoj 2301 [HAOI2011]Problem b(莫比乌斯反演+分块优化)
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
- BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)
- BZOJ 2301 [HAOI2011]Problem b (分块 + 莫比乌斯反演)
- 【HAOI2011】【BZOJ2301】Problem b(莫比乌斯反演,容斥原理)
- [HAOI2011][bzoj2301] Problem b [莫比乌斯反演+容斥原理+分块前缀和优化]
- bzoj2301 [HAOI2011]Problem b 莫比乌斯反演
- [bzoj2301]Problem b莫比乌斯反演+分块优化
- [bzoj2301]problem b 莫比乌斯反演
- BZOJ 2301 Problem b | 莫比乌斯反演
- BZOJ 2301 [HAOI2011]Problem b (莫比乌斯反演)
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- bzoj 2301 Problem b - 莫比乌斯反演
- BZOJ 2301 [HAOI2011]Problem b (容斥+莫比乌斯反演+分块优化 详解)
- BZOJ2301 [HAOI2011]Problem b(莫比乌斯反演)
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演)
- 【BZOJ】2301: [HAOI2011]Problem b(莫比乌斯+分块)
- BZOJ 2301 Problem b(莫比乌斯反演)