【题解】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 ...
随机推荐
- [Java in NetBeans] Lesson 02. Variables, Data Types and Assignment.
这个课程的参考视频在youtube. 主要学到的知识点有: Data Type: int, char, String, double, boolean. When into printf, int ( ...
- c# 在mongo中查询经纬度范围
#region 索引 //IndexKeysDocument doc = new IndexKeysDocument();//新建索引 //2d 平面坐标索引,适用于基于平面的坐标计算.也支持球面距离 ...
- java 基础功能
1.str.length();// 获取整个字符串的长度 public class Test { public static void main(String[] args) { String s = ...
- python --- 字符编码学习小结
上半年的KPI,是用python做一个测试桩系统,现在系统框架基本也差不多定下来了.里面有用到新学的工厂设计模式以及以及常用的大牛写框架的业务逻辑和python小技巧.发现之前自己写的代码还是面向过程 ...
- TCP连接图示
转移2018.4.6 自己总结绘图
- 解决lnmp服务器环境wordpress升级或安装插件主题要输入FTP的方法
使用lnmp一键安装包搭建的服务器环境运行wordpress,在后台升级WP程序.安装或更新插件主题时,每时提示输入FTP信息,该问题的原因是nginx的执行身份用户组非文件用户组,前面博客吧使用虚拟 ...
- HDU1530 最大流问题
第一次写Dinic 然后贴一下 最基础的网络流问题 嘎嘎: #include <iostream> #include<cstdio> #include<string.h& ...
- PowMod (欧拉推式子 + 指数循环节)
最主要的步骤是用 1式子和2式子推 3式子.(难点,看了很多博客最后的时候那个式子看不懂) 当n, m互质时即gcd(n, m) == 1,存在phi(n * m) = phi(m) * phi(n) ...
- 实战http切换成https
Server端使用Nginx + Tomcat Niginx SSL on Tomcat SSL non 步骤: 1.修改代码,将外部引用的http js css 文件修改为https,若外部链接不支 ...
- python中常见的错误类型
Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个 ,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用 ...