HYSBZ 2301 Promblem b 莫比乌斯反演+分块
来源:互联网 发布:ppt数据分析图表制作 编辑:程序博客网 时间:2024/06/04 19:02
题意
对于给出的 n 个询问,每次求有多少个数对 (x,y) ,满足 a ≤ x ≤ b , c ≤ y ≤ d ,且 gcd(x,y) = k , gcd(x,y) 函数为 x 和 y 的最大公约数。
n, a, b, c, d, k都是1e5
思路
- 用容斥原理处理a ≤ x ≤ b , c ≤ y ≤ d的情况,即 bd - ad - bc + ac
- 用之前普通做法的复杂度为1e5,加上1e5次询问,总的复杂度是
n2 级别的,肯定要T - 因为F(e)的值与n/e和m/e有关,所以值的种类是
O(n√)
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;typedef long long ll;const int maxn = 1e6 + 4;const int inf = 0x3f3f3f3f;bool check[maxn+10];int prime[maxn+10];int mu[maxn+10];int sum[maxn+10];void Moblus(){ memset(check,false,sizeof(check)); mu[1] = sum[1] = 1; int tot = 0; for(int i = 2; i <= maxn; i++){ if(!check[i]){ prime[tot++] = i; mu[i] = -1; } for(int j = 0; j < tot; j++){ if(i * prime[j] > maxn) break; check[i * prime[j]] = true; if( i % prime[j] == 0){ mu[i * prime[j]] = 0; break; } else{ mu[i * prime[j]] = -mu[i]; } } sum[i] = sum[i - 1] + mu[i]; }}int a, b, c, d, k;ll get_f1(int n, int m) { if (n > m) swap(n, m); ll ans = 0; for (int i = 1, last = 1; i <= n; i = last + 1) { last = min(n / (n / i), m / (m / i)); ans += (ll)(sum[last] - sum[i - 1]) * (n / i) * (m / i); } return ans;}int main(){ int T; scanf("%d", &T); Moblus(); while(T--){ scanf("%d%d%d%d%d", &a, &b, &c, &d, &k); a = (a - 1) / k; b /= k; c = (c - 1) / k; d /= k; ll f11 = get_f1(b, d); ll f12 = get_f1(a, c); ll f13 = get_f1(a, d); ll f14 = get_f1(b, c); ll f1 = f11 + f12 - f13 - f14; printf("%lld\n",f1); } return 0;}
阅读全文
0 0
- HYSBZ 2301 Promblem b 莫比乌斯反演+分块
- [HYSBZ/BZOJ2301]Problem b [莫比乌斯反演+分块] 【组合数学】
- HYSBZ 2301 Problem b 莫比乌斯 分块优化
- 【莫比乌斯反演】[HYSBZ/BZOJ2301]Problem b
- HYSBZ 2818 (莫比乌斯反演)
- 【HYSBZ 2301】——莫比乌斯反演
- [BZOJ 2301] Problem b【莫比乌斯反演/容斥原理/分块】
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演 + 容斥原理 + 分块优化)
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演,分块,容斥)
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
- BZOJ 2301 Problem b (莫比乌斯反演+区间容斥+分块)
- bzoj 2301 -莫比乌斯函数反演+分块优化
- 【莫比乌斯反演】[HYSBZ/BZOJ2693]jzptab
- HYSBZ 2818 (GCD)莫比乌斯反演
- BZOJ 2301 [HAOI2011]Problem b (容斥+莫比乌斯反演+分块优化 详解)
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演+线性筛法+数论分块
- [莫比乌斯反演+容斥+分块求和] BZOJ2301: [HAOI2011]Problem b
- 队列同步器
- 关于ios动画
- 小心不可见字符组成的不可见字符串
- MySQL中的DDL、DML、DCL、DQL
- 分享一个交叉编译qt库的教程
- HYSBZ 2301 Promblem b 莫比乌斯反演+分块
- 阅读笔记 > 编程需要考虑的问题
- 关于文件
- passwd命令
- 深究js(二)——类型
- 冒泡排序及2种优化方法
- Java异常之throws与throw关键字的用法
- 各大互联网大赛汇总
- Java工具类_模拟HTTP POST请求