博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2301: [HAOI2011]Problem b
阅读量:4680 次
发布时间:2019-06-09

本文共 1530 字,大约阅读时间需要 5 分钟。

二次联通门 : 

 

 

 

 

 

/*    BZOJ 2301: [HAOI2011]Problem b    莫比乌斯反演 + 容斥    将k除下来后就变为了一道原题    后像求二维前缀和一样减去重复计算的,再加上多减的即可*/#include 
#include
#define rg register#define Max 50007int p[Max], mu[Max], sm[Max]; bool is[Max];typedef long long LL;inline LL min (LL a, LL b) { return a < b ? a : b; }inline void read (int &n){ rg char c = getchar (); for (n = 0; !isdigit (c); c = getchar ()); for (; isdigit (c); n = n * 10 + c - '0', c = getchar ());}void Euler (int N){ rg int i, j, k; int C = 0; mu[1] = 1; for (i = 2; i <= N; ++ i) { if (!is[i]) p[++ C] = i, mu[i] = -1; for (j = 1; j <= C; ++ j) { if ((k = i * p[j]) > N) break; is[k] = true; if (i % p[j] == 0) { mu[k] = 0; break; } else mu[k] = -mu[i]; } } for (i = 1; i <= N; ++ i) mu[i] += mu[i - 1];}LL Z (LL N, LL M){ LL res = 0; rg LL i, j; if (N > M) std :: swap (N, M); for (i = 1; i <= N; i = j + 1) { j = min (N / (N / i), M / (M / i)); res += (LL) (mu[j] - mu[i - 1]) * (N / i) * (M / i); } return res;}int main (int argc, char *argv[]){ int T, A, B, C, D, K; read (T); rg int i; Euler (Max - 1); LL Answer = 0; for (; T; -- T) { read (A), read (B), read (C), read (D), read (K); A = (A - 1) / K, C = (C - 1) / K, B /= K, D /= K; Answer = Z (B, D) - Z (A, D) - Z (C, B) + Z (A, C); printf ("%lld\n", Answer); } return 0;}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/8073672.html

你可能感兴趣的文章
js数组操作
查看>>
FlexSlider是一个非常出色的jQuery滑动切换插件
查看>>
mysql插入中文报错
查看>>
tp5 中 model 的聚合查询
查看>>
android wear开发之:增加可穿戴设备功能到通知中 - Adding Wearable Features to Notifications...
查看>>
几种内核对象的受信与非受信状态
查看>>
压缩文件函数库(转载)
查看>>
【转】ubuntu12.04没有/var/log/messages解决
查看>>
几种队列
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>
17_重入锁ReentrantLock
查看>>
winform窗口关闭提示
查看>>
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题
查看>>