洛谷P2522 [HAOI2011]Problem b (莫比乌斯反演+容斥)
题意:求$\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)==k]$(1<=a,b,c,d,k<=50000)。
是洛谷P3455 [POI2007]ZAP-Queries加强版,多了下界。
设$f(n,m)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==k]$
根据容斥可以显然的得出Ans=f(b,d)-f(b,c-1)-f(a-1,d)+f(a-1,c-1)。
对于f(n,m)的求解:
$f(n,m)=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==k]$
$=\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k}\rfloor}[gcd(i,j)==1]$
$=\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\mu(d){\lfloor \frac{n}{kd}\rfloor}{\lfloor \frac{m}{kd}\rfloor}$
预处理莫比乌斯函数前缀和,后面整除分块。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=;
bool p[N];
int pri[N],tot,mu[N];
void init() {
mu[]=;
for(int i=;i<N;i++) {
if(!p[i]) pri[tot++]=i,mu[i]=-;
for(int j=;j<tot&&pri[j]*i<N;j++) {
p[pri[j]*i]=true;
if(i%pri[j]==) {
mu[i*pri[j]]=;
break;
}
else mu[i*pri[j]]=-mu[i];
}
}
for(int i=;i<N;i++) mu[i]+=mu[i-];
}
ll cal(int n,int m,int k) {
if(n>m) swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+) {
r=min(n/(n/l),m/(m/l));
ans+=1LL*(mu[r]-mu[l-])*(n/k/l)*(m/k/l);
}
return ans;
}
int main() {
init();
int T,a,b,c,d,k;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
printf("%lld\n",cal(b,d,k)-cal(b,c-,k)-cal(a-,d,k)+cal(a-,c-,k));
}
return ;
}
洛谷P2522 [HAOI2011]Problem b (莫比乌斯反演+容斥)的更多相关文章
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)
[Update] 我好像现在都看不懂我当时在写什么了=-= \(Description\) 求\(\sum_{i=a}^b\sum_{j=c}^d[(i,j)=k]\) \(Solution\) 首先 ...
- BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- P2522 [HAOI2011]Problem b (莫比乌斯反演)
题目 P2522 [HAOI2011]Problem b 解析: 具体推导过程同P3455 [POI2007]ZAP-Queries 不同的是,这个题求的是\(\sum_{i=a}^b\sum_{j= ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
传送门 我们考虑容斥,设$ans(a,b)=\sum_{i=1}^a\sum_{j=1}^b[gcd(a,b)==k]$,这个东西可以和这一题一样去算洛谷P3455 [POI2007]ZAP-Quer ...
- 洛谷 P2522 [HAOI2011]Problem b (莫比乌斯反演+简单容斥)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷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} ...
- BZOJ 2301 Problem b (莫比乌斯反演+容斥)
这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ...
- 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 ...
随机推荐
- idea中 ClassNotFoundException报错问题
1.首先你要明确 你少了哪个包(哪个包报错 ) 2.比如一个第三方的包,你明明导入了 idea导包方法: 明明导入成功了,但是报错. 3.其实并没有结束..... 一定要把右边的 双击 ...
- Linux下ps -ef和ps aux的区别及格式详解-转
原文:https://www.linuxidc.com/Linux/2016-07/133515.htm Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区 ...
- springboot 集成eureka 超详细配置
撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 原文链接: https://blog.csdn.net/nanbiebao6522/article/detail ...
- C#绘制渐变线条
Brush brush = , ), , ), Color.Blue, Color.White); e.Graphics.FillRectangle(brush, this.ClientRectang ...
- Linux时间介绍
Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...
- Django项目:CRM(客户关系管理系统)--55--46PerfectCRM实现登陆后页面才能访问
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- #queue队列 #生产者消费者模型
#queue队列 #生产者消费者模型 #queue队列 #有顺序的容器 #程序解耦 #提高运行效率 #class queue.Queue(maxsize=0) #先入先出 #class queue.L ...
- css3动画曲线运动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Wamp PHP 安装各种拓展
安装redis 下载dll文件地址:http://pecl.php.net/package/redis 下载对应版本nginx:NTS apache:TS 文件放在php的ext目录下 php.ini ...
- 20190807-RP-Explosion
如题,RP爆发后爆炸了. 话说在七夕这天考试? 那么? 黑暗又来临了? 没有人见过那一幕. 在如漆般胶着的黑暗中, Struggle?Dying? 用鲜血浇灌花朵,用死亡迎接明天. 考试过程: 看看三 ...