bzoj2301(莫比乌斯反演+分块)
题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
分析:gcd(x,y)==k等价于gcd(x/k,y/k)==1,根据莫比乌斯反演很容易求出[1,n][1,m]的gcd(x,y)==1的对数,但询问有50000个,直接去计算肯定会TLE,这里得分块处理加速计算,因为对于(n/i)和(m/i)在一定区间内的值是一定的,根据这点可以每次跳过这段的计算。
这里的分块有点类似求和sum=n/1+n/2+n/3+...+n/(n-1)+n/n.直接去算O(n),分块O(sqrt(n)).
- #pragma comment(linker,"/STACK:1024000000,1024000000")
- #include <cstdio>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <limits.h>
- #include <iostream>
- #include <algorithm>
- #include <queue>
- #include <cstdlib>
- #include <stack>
- #include <vector>
- #include <set>
- #include <map>
- #define LL long long
- #define mod 100000000
- #define inf 0x3f3f3f3f
- #define eps 1e-6
- #define N 50000
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- #define PII pair<int,int>
- using namespace std;
- inline int read()
- {
- char ch=getchar();int x=,f=;
- while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
- while(ch<=''&&ch>=''){x=x*+ch-'';ch=getchar();}
- return x*f;
- }
- bool vis[N+];
- int mu[N+],prime[N+],sum[N+];
- void Mobius()
- {
- memset(vis,false,sizeof(vis));
- mu[]=;
- int tot=;
- for(int i=;i<=N;i++)
- {
- if(!vis[i])
- {
- prime[tot++]=i;
- mu[i]=-;
- }
- for(int j=;j<tot;j++)
- {
- if(i*prime[j]>N)break;
- vis[i*prime[j]]=true;
- if(i%prime[j]==)
- {
- mu[i*prime[j]]=;
- break;
- }
- else
- {
- mu[i*prime[j]]=-mu[i];
- }
- }
- }
- for(int i=;i<=N;i++)sum[i]=sum[i-]+mu[i];
- }
- LL solve(int n,int m)
- {
- LL res=;
- if(n>m)swap(n,m);
- for(int i=,last=;i<=n;i=last+)
- {
- last=min(n/(n/i),(m/(m/i)));
- res+=1LL*(sum[last]-sum[i-])*(n/i)*(m/i);
- }
- return res;
- }
- int main()
- {
- int T,a,b,c,d,k;
- Mobius();
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
- a--;c--;
- LL ans=solve(b/k,d/k)-solve(b/k,c/k)-solve(a/k,d/k)+solve(a/k,c/k);
- printf("%lld\n",ans);
- }
- }
bzoj2301(莫比乌斯反演+分块)的更多相关文章
- bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减 ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- bzoj 2301 [HAOI2011]Problem b(莫比乌斯反演+分块优化)
题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 1≤n≤50000,1≤a≤b≤50000, ...
- ACdream 1148(莫比乌斯反演+分块)
传送门:GCD SUM 题意:给出N,M执行如下程序:long long ans = 0,ansx = 0,ansy = 0;for(int i = 1; i <= N; i ++) fo ...
- [bzoj2301]Problem b莫比乌斯反演+分块优化
题意: $\sum\limits_{\begin{array}{*{20}{c}}{a < = x < = b}\\{c < = y < = d}\end{array}} {\ ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- JZYZOJ1518 [haoi2011]b 莫比乌斯反演 分块 容斥
http://172.20.6.3/Problem_Show.asp?id=1518最开始只想到了n^2的写法,肯定要超时的,所以要对求gcd的过程进行优化.首先是前缀和容斥,很好理解.第二个优化大致 ...
- BZOJ2301 莫比乌斯反演
题意:a<=x<=b,c<=y<=d,求满足gcd(x,y)=k的数对(x,y)的数量 ((x,y)和(y,x)不算同一个) 比hdu1695多加了个下界,还有 ...
随机推荐
- teamviewer无法启动
在 Linux.Mac OS X和 Windows下都可以用,但在 Linux 下无法启动时怎么办? 笔者回家工作时,都会用 Teamviewer 连线到其他 Linux 桌面,但某天起 Teamvi ...
- 公司简介 - CCDI悉地国际-工程实践专业服务的引领者
公司简介 - CCDI悉地国际-工程实践专业服务的引领者 关于悉地国际 CCDI悉地国际(以下简称"CCDI")创立于1994年,是在城市建设和开发领域从事综合专业 ...
- EasyUI - 后台管理系统 - 增加,删除,修改
效果: html代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ad ...
- XML 关键字
SGML--Standard Generalized Marked Language 标准通用标记语言GML--Generalized Marked Language 通用标记语言XML--Extes ...
- HDU 3068 最长回文 Manacher算法
Manacher算法是个解决Palindrome问题的O(n)算法,能够说是个超级算法了,秒杀其它一切Palindrome解决方式,包含复杂的后缀数组. 网上非常多解释,最好的解析文章当然是Leetc ...
- Python集成开发环境(Eclipse+Pydev)
刚開始学习python,就用Editplus, Notepad++来写小程序, 后来接触了Sublime Text2.认为很不错,没事写写代码.就用编辑器Sublime Text2,最好再配搭一个ap ...
- (android高仿系列)今日头条 --新闻阅读器 (三) 完结 、总结 篇
从写第一篇今日头条高仿系列开始,到现在已经过去了1个多月了,其实大体都做好了,就是迟迟没有放出来,因为我觉得,做这个东西也是有个过程的,我想把这个模仿中一步一步学习的过程,按照自己的思路写下来,在根据 ...
- 进阶:案例三: Upload File using WebDynpro
1.节点创建,其中DATASOURCE存放uploadfile名称 2.layout布局 3.upload事件代码: method ONACTIONUPLOAD . DATA: lo_Node typ ...
- 使用JDBC进行数据库的事务操作(1)
本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...
- Wireshark入门与进阶---数据包捕获与保存的最基本流程
Wireshark入门与进阶系列(一) "君子生非异也.善假于物也"---荀子 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原 ...