【题解】Luogu P2522 [HAOI2011]Problem b
原题传送门
这题需要运用莫比乌斯反演(懵逼钨丝繁衍)
我们看题面,让求对于区间\([a,b]\)内的整数x和\([c,d]\)内的y,满足$ gcd(x,y)=k$的数对的个数
我们珂以跟容斥原理(二维前缀和)一样来求答案:
设\(solve(x,y,k)\)表示对于区间\([1,x]\)内的整数x和\([1,y]\)内的y,满足\(gcd(x,y)=k\)的数对的个数
那么答案\(ans=solve(b,d,k)-solve(a-1,d,k)-solve(b,c-1,k)+solve(a-1,c-1,k)\)
那么solve怎么写呢?
设F(n)表示满足\(gcd(x,y)\%t=0\)的数对个数,f(t)表示满足\(gcd(x,y)=t\)的数对个数,实际上答案就是f(k)
这就满足莫比乌斯反演的关系式了
显然我们珂以得知\(F(t)=(b/t)*(d/t)\)
我们根据反演的第二个公式便珂以得出
$$f(k)=\sum_{n|k}\mu(\frac{k}{n})F(k)$$
再加上整除分块就珂以了
#include <bits/stdc++.h>
#define N 50005
#define ll long long
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register ll x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int Min(register int a,register int b)
{
return a<b?a:b;
}
int miu[N],v[N],sum[N];
inline ll solve(register int a,register int b,register int k)
{
int maxround=Min(a/k,b/k);
ll ans=0;
for(register int l=1,r;l<=maxround;l=r+1)
{
r=Min((a/k)/((a/k)/l),(b/k)/((b/k)/l));
ans+=(ll)((a/k)/l)*((b/k)/l)*(sum[r]-sum[l-1]);
}
return ans;
}
int main()
{
for(register int i=1;i<=N;++i)
miu[i]=1,v[i]=0;
for(register int i=2;i<=N;++i)
{
if(v[i])
continue;
miu[i]=-1;
for(register int j=i<<1;j<=N;j+=i)
{
v[j]=1;
if((j/i)%i==0)
miu[j]=0;
else
miu[j]*=-1;
}
}
for(register int i=1;i<=N;++i)
sum[i]=sum[i-1]+miu[i];
int t=read();
while(t--)
{
int a=read()-1,b=read(),c=read()-1,d=read(),k=read();
ll ans=solve(b,d,k)-solve(a,d,k)-solve(b,c,k)+solve(a,c,k);
write(ans),puts("");
}
return 0;
}
【题解】Luogu P2522 [HAOI2011]Problem b的更多相关文章
- Luogu P2522 [HAOI2011]Problem b
如果你做过[Luogu P3455 POI2007]ZAP-Queries就很好办了,我们发现那一题求的是\(\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=d]\),就是这道题 ...
- Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
设$f(d)=\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)==d],\\F(n)=\sum_{n|d}f(d)=\lfloor \frac{N}{n} \rfloor \lflo ...
- P2522 [HAOI2011]Problem b (莫比乌斯反演)
题目 P2522 [HAOI2011]Problem b 解析: 具体推导过程同P3455 [POI2007]ZAP-Queries 不同的是,这个题求的是\(\sum_{i=a}^b\sum_{j= ...
- 洛谷P2522 - [HAOI2011]Problem b
Portal Description 进行\(T(T\leq10^5)\)次询问,每次给出\(x_1,x_2,y_1,y_2\)和\(d\)(均不超过\(10^5\)),求\(\sum_{i=x_1} ...
- [luogu] P2519 [HAOI2011]problem a (贪心)
P2519 [HAOI2011]problem a 题目描述 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同 ...
- Luogu P2519 [HAOI2011]problem a
题目链接 \(Click\) \(Here\) \(DP\)神题.以后要多学习一个,练一练智商. 关键点在于把"有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低"这句话 ...
- P2522 [HAOI2011]Problem b
还有三倍经验的吗(窒息) 思路 其实就是P3455套了个简单的容斥 把问题转化成f(n,m,k)-f(a-1,m,k)-f(n,b-1,k)+f(a-1,b-1,k)就可以了 和p3455几乎一样的代 ...
- 题解【bzoj2301 [HAOI2011]Problem b】
Description 求有多少个数对 \((x,y)\) ,满足$ a \leq x \leq b$ ,\(c \leq y \leq d\) ,且 \(\gcd(x,y) = k\),\(\gcd ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
传送门 我们考虑容斥,设$ans(a,b)=\sum_{i=1}^a\sum_{j=1}^b[gcd(a,b)==k]$,这个东西可以和这一题一样去算洛谷P3455 [POI2007]ZAP-Quer ...
随机推荐
- python threading acquire release
线程同步 //test.py import threading import time exitFlag = 0 class myThread (threading.Thread): def __in ...
- iOS UI基础-9.1 UITableView 团购
概述 接下来,我们要做的是团购界面的设计,最张要实现的效果图及项目结构图 团购数据的展示 思路: 系统自带的tableCell不能展示三个文本,不能满足条件,自定义tableCell 每一个 ...
- Spring+SpringMVC+MyBatis整合应用
1)搭建Spring,SpringMVC和MyBatis环境 创建一个web工程 添加MyBatis相关环境 引入数据库驱动包和DBCP连接池开发包 引入MyBatis开发包 添加Spring,Spr ...
- c# 使用MS SqlServer,连接成功,但是还报异常A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0。。。。
c# 使用MS SqlServer,连接成功,但是还报异常A connection was successfully established with the server, but then an ...
- IE浏览器解决无法识别js中getElementsByClassName问题
关于ie浏览器无法识别js中getElementsByClassName问题,现通过以下方法,引用如下js /** *打印js对象详细信息 */ function alertObj(obj) { va ...
- 内网渗透之如何玩转Meterpreter?(nc.exe)
十.Meterpreter常用命令 1.基本命令(包含meterpreter和msf终端.ruby接口.目标shell交互的命令) background(进程隐藏至后台) sessions(查看已经成 ...
- php aes128加密
//[加密数据]AES 128 ECB模式 public function aesEncrypt($str){ $screct_key = Yii::$app->params['encryptK ...
- codefroces 266
D题说的是 你选定一个区间如[l r] 将这个区间内的每个数都加上1,然后求将这整个整个序列都变成h的方案数有多少种 没有一个位置会有超过1次方[ 或者放 ] 考虑当前位置放的是什么 有5种 - 不 ...
- codeforces 980B Marlin
题意: 有一个城市有4行n列,n是奇数,有一个村庄在(1,1),村民的活动地点是(4,n): 有一个村庄在(4,1),村民的活动地点是(1,n): 现在要修建k个宾馆,不能修建在边界上,问能否给出一种 ...
- Hue中hive(hive cli)查询结果中显示列名,不带表名
hive cli中显示列名 进入hive cli后 set hive.cli.print.header=true; 之后出现列名,但是带了表名前缀,由于网上没找到资料,于是到官网肉眼扫描所有参数,总算 ...