</pre><pre code_snippet_id="507886" snippet_file_name="blog_20141104_2_5383199" name="code" class="cpp">#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <cstdio>
#include <cstring>
using namespace std; typedef long long LL; inline int read(){
int x = 0,f = 1; char ch = getchar();
while(ch < '0'||ch > '9'){if(ch == '-')f=-1;ch = getchar();}
while(ch >= '0'&&ch <= '9'){x = x * 10 + ch -'0';ch = getchar();}
return x*f;
} ////////////////////////////////////////////////////////////////// /*
算法:容斥原理 + 分块
题目:
对于给出的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,1≤c≤d≤50000,1≤k≤50000 */ const int MAXN = 50000 + 10;
int tot;
LL mu[MAXN+1],sum[MAXN+1],pri[MAXN+1];
bool mark[MAXN]; void get(){
mu[1] = 1;
for(int i = 2;i <= MAXN;++i){
if(!mark[i])pri[tot++] = i,mu[i] = -1;
for(int j = 0;j < tot&&i*pri[j] <= MAXN;++j){
mark[i*pri[j]] = 1;
if(i % pri[j]==0){mu[i*pri[j]] = 0; break;}
else mu[i*pri[j]] = -mu[i];
}
} for(int i = 1;i <= MAXN;++i) //预处理前缀
sum[i] = sum[i-1] + mu[i];
} int cal(int n,int m){
if(n > m) swap(n,m);
LL ans = 0,pos;
for(LL i = 1;i <= n;i = pos + 1){
pos = min(n/(n/i),m/(m/i)); //分块
ans += (sum[pos] - sum[i-1]) * (n/i) * (m/i);
}
return ans;
} int main()
{
get();
int T = read();
while(T--){
int a = read(),b = read(),c = read(),d = read(),k = read();
LL ans = cal(b/k,d/k);
ans -= cal((a-1)/k,d/k);
ans -= cal(b/k,(c-1)/k);
ans += cal((a-1)/k,(c-1)/k);
printf("%lld\n",ans);
}
return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

[bzoj2301: [HAOI2011]Problem b] 乞讨的更多相关文章

  1. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  2. Bzoj-2301 [HAOI2011]Problem b 容斥原理,Mobius反演,分块

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题意:多次询问,求有多少对数满足 gcd(x,y)=k, a<=x<=b ...

  3. 【数论】【莫比乌斯反演】【线性筛】bzoj2301 [HAOI2011]Problem b

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

  4. bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减 ...

  5. BZOJ2301 [HAOI2011]Problem b

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演

    分析:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 然后对于求这样单个的gcd(x,y)=k的, ...

  7. bzoj2301: [HAOI2011]Problem b懵逼乌斯反演

    属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 ...

  8. [luogu2522][bzoj2301][HAOI2011]Problem b【莫比乌斯反演】

    传送门:https://www.luogu.org/problemnew/show/P2522 题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  9. 题解【bzoj2301 [HAOI2011]Problem b】

    Description 求有多少个数对 \((x,y)\) ,满足$ a \leq x \leq b$ ,\(c \leq y \leq d\) ,且 \(\gcd(x,y) = k\),\(\gcd ...

随机推荐

  1. Dave(正方形能围成的最大点数)

    Dave Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submis ...

  2. Jquery面试题整合

    来自棱镜学院-在线IT教育     www.prismcollege.com 一.Jquery測试题 以下哪种不是jquery的选择器?(单选) A.基本选择器 B.后代选择器 C.类选择器 D.进一 ...

  3. 概率dp ZOJ 3640

    Help Me Escape Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit ...

  4. IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色

    在application: application didFinishLaunchingWithOptions: launchOptions 增加以下代码就能够实现对tabbar的颜色的改动 //设定 ...

  5. java public protect default private

    (1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)对于protected修 ...

  6. Windows - 远程桌面无证书

    可以从命令行启动远程桌面,输入:mstsc /v:地址:端口 /admin

  7. ASP.NET中多个相同name的控件在后台正确取值

    有兽,   页面上可能有多个相同name的Html表单控件,   一般在后台使用Request.Form[“name”]取值,并用‘,’分隔.   但是当值中包含逗号时,   取值就会出现异常,   ...

  8. 网页body中background在ie中显示不出来

    网页body中background在ie中显示不出来 | 浏览:349 | 更新:2014-03-11 14:03 刚才上班在公司网站上写一个页面,在谷歌浏览器,火狐浏览器里调试完后,一切正常,忽然想 ...

  9. JavaScript---while和do while的区别

    JavaScript,while 和do while的区别: 场景一:小盒子身上有100元,用while输出能吃多少次米线,一碗米线12元,最终还剩下多少钱. var money = 100; whi ...

  10. 整理SQL

    由4张简单的不能再简单的表,演变出50道SQL 表结构: 表Student (S#,Sname,Sage,Ssex) 学生表 S#  student_no Sage  student_age   Ss ...