[bzoj2301: [HAOI2011]Problem b] 乞讨
2015-09-27 15:09
387 查看
</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; }
相关文章推荐
- win7系统如何添加扫描仪?win7系统快速添加扫描仪的方法
- android Activity和Fragment创建视图的不同
- 运算符小记
- iOS之UI随笔-UIButton与UIImageView
- JavaScript高级程序设计之面向对象的程序设计之创建对象之原型模式 第6.2.3讲笔记
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #1
- C#读写INI文件的方法
- php array_push 与 $arr[]=$value 性能比较
- 点击苹果模拟器触发事件
- mySql and与or的使用
- 第二周学习内容小结
- Keil μVision5和Sublime Text2中文乱码
- LoaderManager杂记
- OpenStack在计算节点安装Docker遇到的问题
- HDU 5480 Conturbatio
- Java基础知识强化100:jsp和servlet有什么区别
- MySQL——存储过程
- HTML5 JS API 本地存储LocalStorage基本操作
- java匿名内部类
- ASP.NET MVC 2右键菜单和简单分页实例讲解