BZOJ 2301 HAOI2011 Problem b 容斥原理+莫比乌斯反演
来源:互联网 发布:linux sort 指定列 编辑:程序博客网 时间:2024/05/18 09:21
题目大意:多次询问有多少个数对(x,y)满足a<=x<=b,c<=y<=d,且GCD(x,y)=k
首先利用容斥原理将询问分解 问题转化为求有多少个数对(x,y)满足x<=m,y<=n,且GCD(x,y)=k
这里就可以利用到莫比乌斯反演:
我们令F(d)为GCD(x,y)=d且x<=m,y<=n的数对数
f(d)为d|GCD(x,y)且x<=m,y<=n的数对数
那么显然有F(d)=(n/d)*(m/d)
但是直接套用公式还是O(n^2)级别的
考虑到(n/d)*(m/d)最多只会有2√n个商 因此我们可以枚举这个商 对μ维护一个前缀和来计算
具体实现详见代码
曾经看了某人的题解天真地认为暴力可以过于是兴冲冲地写了暴力去交了一发50s的TLE……
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 100100using namespace std;typedef long long ll;ll mu[M],prime[M],tot;bool not_prime[M];void Linear_Shaker(){int i,j;mu[1]=1;for(i=2;i<M;i++){if(!not_prime[i]){prime[++tot]=i;mu[i]=-1;}for(j=1;j<=tot&&i*prime[j]<M;j++){not_prime[prime[j]*i]=true;if(i%prime[j]==0){mu[prime[j]*i]=0;break;}mu[prime[j]*i]=-mu[i];}}for(i=1;i<M;i++)mu[i]+=mu[i-1];}ll Calculate(int m,int n,int k){int i,last;long long re=0;n/=k;m/=k;for(i=1;i<=m&&i<=n;i=last+1){last=min(n/(n/i),m/(m/i));re+=(mu[last]-mu[i-1])*(m/i)*(n/i);}return re;}int main(){int T,a,b,c,d,k;Linear_Shaker();for(cin>>T;T;T--){scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);printf("%lld\n", Calculate(b,d,k)-Calculate(a-1,d,k)-Calculate(b,c-1,k)+Calculate(a-1,c-1,k) );}}
1 0
- BZOJ 2301 HAOI2011 Problem b 容斥原理+莫比乌斯反演
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演 + 容斥原理 + 分块优化)
- BZOJ 2301: [HAOI2011]Problem b(容斥原理+莫比乌斯反演)
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演,分块,容斥)
- BZOJ 2301: [HAOI2011]Problem b 容斥+莫比乌斯反演
- [BZOJ 2301][HAOI2011]Problem b:莫比乌斯反演+容斥
- 2301: [HAOI2011]Problem b 莫比乌斯反演+前缀+容斥原理
- [BZOJ 2301][HAOI2011] Problem b 莫比乌斯反演
- bzoj 2301: [HAOI2011]Problem b 【莫比乌斯反演】
- BZOJ 2301: [HAOI2011]Problem b - 莫比乌斯反演
- [莫比乌斯反演] BZOJ 2301 [HAOI2011]Problem b
- BZOJ 2301: [HAOI2011]Problem b【莫比乌斯反演
- bzoj 2301: [HAOI2011]Problem b 莫比乌斯反演
- bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演)
- BZOJ 2301: [HAOI2011]Problem b (莫比乌斯反演)
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演+容斥原理
- BZOJ 2301 [HAOI2011]Problem b (容斥+莫比乌斯反演+分块优化 详解)
- [BZOJ 2301] Problem b【莫比乌斯反演/容斥原理/分块】
- sigmoid函数解析与应用
- 支付宝官方服务电话是多少【官网认证】
- 第十六州项目一数组排列
- nyoj94cigarettes(数学题)
- windows 服务
- BZOJ 2301 HAOI2011 Problem b 容斥原理+莫比乌斯反演
- 支付宝官方客服电话是多少【官网认证】
- 对几款网络抓包工具的评测
- Android Studio 教程(三)--快捷键
- AFNetworking上传图片/视频
- bootstrap
- 支付宝官方服务热线电话是多少【官网认证】
- ICE 网络库尝试
- C和C++中main函数的参数及其返回值详细解析