Problem Description

对于给出的 n 个询问,每次求有多少个数对 (x,y) ,满足 a ≤ x ≤ b , c ≤ y ≤ d ,且 gcd(x,y) = k , gcd(x,y) 函数为 x 和 y 的最大公约数。

Input

第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k

Output

共n行,每行一个整数表示满足要求的数对(x,y)的个数

Sample Input

2
2 5 1 5 1
1 5 1 5 2

Sample Output

14
3

思路:

与 GCD(HDU-1695) 相似,但 x、y 不是从 1 开始,因此需要使用容斥原理来进行处理

题目实质是要求:

利用容斥定理来进行转换,设

那么有:

因此,现在只需要考虑计算  即可

设 f(d) 为满足 gcd(i,j)=d 的个数,即:

设 g(n) 为满足 gcd(i,j)=d 的倍数的个数,即:

可以看出,f(d) 与 g(n) 符合莫比乌斯反演的形式:

那么,对于  进行化简

将 f(k) 代入,有:

根据莫比乌斯反演,有:

设枚举项  为 t

那么有 

为了优化时间,可以将  的 k 提出去,即有:

此时的复杂度为 O(n),由于是多组查询,发现式子中有整除,利用整除分块求 mu 的前缀和,进行优化即可

Source Program

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define Pair pair<int,int>
const int MOD = 1E9+7;
const int N = 100000+5;
const int dx[] = {1,-1,0,0,-1,-1,1,1};
const int dy[] = {0,0,-1,1,-1,1,-1,1};
using namespace std;
int mu[N];
int prime[N];
bool bprime[N];
int cnt;
LL sum[N];
void getMu(int n){//线性筛求莫比乌斯函数cnt=0;mu[1]=1;//根据定义,μ(1)=1memset(bprime,false,sizeof(bprime));for(int i=2;i<=n;i++){//求2~n的莫比乌斯函数if(!bprime[i]){prime[++cnt]=i;//存储质数mu[i]=-1;//i为质数时,μ(1)=-1}for(int j=1;j<=cnt&&i*prime[j]<=n;j++){//枚举i之前的素数个数bprime[i*prime[j]]=true;//不是质数if(i%prime[j])//i不是prime[j]的整数倍时,i*prime[j]就不会包含相同质因子mu[i*prime[j]]=-mu[i];//mu[k]=mu[i]*mu[prime[j]],因为prime[j]是质数,mu值为-1else{mu[i*prime[j]]=0;break;//留到后面再筛}}}for(int i=1;i<=n;i++)sum[i]=sum[i-1]+mu[i];
}
LL cal(LL n,LL m,LL k){//计算a在[1,n],b在[1,m]中GCD(a,b)=1的个数n/=k;m/=k;LL minn=min(n,m);LL res=0;for(int left=1,right;left<=minn;left=right+1){right=min(n/(n/left),m/(m/left));res+=(1LL)*(n/left)*(m/left)*(sum[right]-sum[left-1]);}return res;
}int main(){getMu(100000);int t;scanf("%d",&t);int Case=1;while(t--){int a,b,c,d,k;scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);LL res=cal(b,d,k)-cal(a-1,d,k)-cal(c-1,b,k)+cal(a-1,c-1,k);printf("%lld\n",res);}return 0;
}

Problem b(BZOJ-2301/HAOI-2011)相关推荐

  1. 值得一做》关于并查集的进化题目 BZOJ1015(BZOJ第一页计划)(normal-)

    这道题和以前做过的一道经典的洪水冲桥问题很像,主要做法是逆向思维.(BZOJ第10道非SB题纪念) 先给出题目 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者 ...

  2. 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)

    置换群: 看半天置换群表示并看不懂QAQ 但顾名思义是置换组成的群 其实不用看懂也行,就拿简单的例子来说吧 有一个序列s = {1, 2, 3, 4, 5, 6} 和一个变换规则t = {2, 3, ...

  3. 莫比乌斯反演(bzoj 2301: [HAOI2011]Problem b)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 5322  Solved: 2459 [Submi ...

  4. BZOJ 2301 - Problem b(莫比乌斯反演+容斥)

    题目链接 https://cn.vjudge.net/problem/HYSBZ-2301 [题意] 对于给出的 n 个询问,每次求有多少个数对(x,y)(x,y) ,满足 a≤x≤b,c≤y≤da≤ ...

  5. BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...

  6. 线性基(bzoj 2460: [BeiJing2011]元素)

    线性基: 包含最多h个数(a1, a2, a3, -, ah),其中ak如果存在,那么最高位一定是第k位 性质①:线性基中任意集合xor出来的数的值域 = 原数列任意集合xor出的数的值域 性质②:线 ...

  7. 蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真)

    目录 0. 前言 1. 什么是蒙提霍尔问题(Monty Hall problem) 2. Naive approach:分类讨论 3. Python蒙特卡洛仿真 4. 直观的理解1 5. 贝叶斯方法 ...

  8. 虚树(bzoj 3572: [Hnoi2014]世界树)

    例题: 一棵n个节点的树,m次查询,每次查询给你一个点集U,对于树上的所有节点x(x∉U),你要找到一个点y(y∈U)满足y点离x点最近且标号最小,表示x点受y点管辖,而你的任务就是对于每次查询输出U ...

  9. 基环树DP(bzoj 1040: [ZJOI2008]骑士)

    树:n个点n-1条边的连通图 基环树:n个点n条边的连通图,也就是一个环套着多棵树 基环树DP:找到环上任意相邻两点,断掉这两点之间的边,就形成了一棵树 之后对这两点分别进行一次树形DP即可 例题: ...

  10. Lengauer-Tarjan算法--支配树构造(bzoj 2815: [ZJOI2012]灾难)

    模型: 一个有向图G,设定一个点r,要求点r能到达G中所有的点,如果这样的点不存在,新建并向所有入度为0的点连边 支配点: 对于点u,如果在删掉点p之后,r不能到达u,那么称p(p!=u)点是u点的一 ...

最新文章

  1. select,epoll,poll比较
  2. IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...
  3. Weblogic12C 集群实现session同步
  4. wireshark抓包详解
  5. 《1万小时成功定律——解构成功》
  6. imx8m开发板资料
  7. leetcode645. 错误的集合
  8. C# 实现在线软件自动升级自动下载更新文件
  9. 12.Linux 高性能服务器编程 --- 高性能 IO 框架库 Libevent
  10. Java链表的常用算法原理
  11. 精品软件试用及分享 屏幕录像专家注册版 附下载地址
  12. VB.net 调用FFmpeg简单处理视频(类库——6)
  13. 同义词(近义词)算法总结(附代码)
  14. 代写品牌故事-品牌故事如何写才感人
  15. 小谈国内桌面浏览器占有率
  16. linux/debian安装wps以及缺失字体,亲测可用
  17. RxView学习及实现按钮防抖功能
  18. BINKS 502375润滑脂
  19. java 新浪 发送邮件_使用javamail新浪郵箱發送遇到的問題(已解決)
  20. Windows远程桌面连接不上提示出现了内部错误的解决办法

热门文章

  1. 开源的C#组件——RSS.NET
  2. 压力、焦虑远远超出全国平均值,近4成程序员心理不健康?
  3. 拒绝yyds洗脑,我是Pro!
  4. 被裁半年后进大厂,他咋做到的?
  5. 什么?你项目还在用Date表示时间?!
  6. 蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
  7. Chrome 开发工具 Workspace 使用
  8. MySQL修改配置 区分大小写
  9. 关于oracle分组后组外排序的问题
  10. 重磅!央行启动企业信息联网核查系统