http://www.lydsy.com/JudgeOnline/problem.php?id=2301 (题目链接)

题意

  给出${a,b,c,d,k}$,${n}$组询问,求$${\sum_{i=a}^{b}\sum_{j=c}^{d} [gcd(i,j)=k]}$$

Solution

  莫比乌斯反演,就是一堆公式推啊推。

  运用容斥,那么答案就变成了:$${\sum_{i=1}^{b}\sum_{j=1}^{d} [gcd(i,j)=k]-\sum_{i=1}^{b}\sum_{j=1}^{c-1} [gcd(i,j)=k]-\sum_{i=1}^{a-1}\sum_{j=1}^{d} [gcd(i,j)=k]+\sum_{i=1}^{a-1}\sum_{j=1}^{c-1} [gcd(i,j)=k]}$$

  这${4}$项都长得差不多,我们考虑其一般情况。

  \begin{aligned}   &  \sum_{i=1}^{n}\sum_{j=1}^{m} [gcd(i,j)=k] \\  =&\sum_{i=1}^{\lfloor{n/k}\rfloor}\sum_{j=1}^{\lfloor{m/k}\rfloor} [gcd(i,j)=1]  \\  =&\sum_{t=1}^{n}μ(t)\lfloor\frac{n}{kt}\rfloor\lfloor\frac{m}{kt}\rfloor    \end{aligned}

  于是我们就可以${O(n)}$的计算这个东西了,然而还不够。考虑到${\lfloor\frac{n}{kt}\rfloor}$和${\lfloor\frac{m}{kt}\rfloor}$的取值各有${2\sqrt{n},2\sqrt{m}}$种,所以我们对${μ(t)}$分段求前缀和。代码很好写。

细节

  LL

代码

// bzoj2301
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=1000010;
int p[maxn],vis[maxn],mu[maxn],s[maxn],a,b,c,d,K; LL solve(int n,int m) {
n/=K,m/=K;
if (n>m) swap(n,m);
LL res=0;
for (int i=1,j;i<=n;i=j+1) { //区间[i,j]
j=min(n/(n/i),m/(m/i));
res+=(LL)(n/i)*(m/i)*(s[j]-s[i-1]);
}
return res;
}
int main() {
int T;scanf("%d",&T);
s[1]=mu[1]=1;
for (int i=2;i<maxn;i++) {
if (!vis[i]) p[++p[0]]=i,mu[i]=-1;
for (int j=1;j<=p[0] && i*p[j]<maxn;j++) {
vis[i*p[j]]=1;
if (i%p[j]==0) {mu[i*p[j]]=0;break;}
else mu[i*p[j]]=-mu[i];
}
s[i]=s[i-1]+mu[i];
}
while (T--) {
scanf("%d%d%d%d%d",&a,&b,&c,&d,&K);
printf("%lld\n",solve(b,d)-solve(b,c-1)-solve(a-1,d)+solve(a-1,c-1));
}
return 0;
}

【bzoj2301】 HAOI2011—Problem b的更多相关文章

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

    Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...

  2. 【BZOJ2302】[HAOI2011]Problem C(动态规划)

    [BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...

  3. 【BZOJ2298】[HAOI2011]problem a DP

    [BZOJ2298][HAOI2011]problem a Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相 ...

  4. 【BZOJ2298】[HAOI2011]problem a

    题解: 虽然也是个可以过得做法...但又没有挖掘到最简单的做法... 正解是发现这个东西等价于求不相交区间个数 直接按照右端点排序,然后贪心就可以O(n)过了 而我的做法是按照a排序(其实我是在模拟这 ...

  5. 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)

    [BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  6. 【Luogu4137】Rmq Problem/mex (莫队)

    [Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...

  7. 【BZOJ2299】[HAOI2011]向量(数论)

    [BZOJ2299][HAOI2011]向量(数论) 题面 BZOJ 洛谷 题解 首先如果我们的向量的系数假装可以是负数,那么不难发现真正有用的向量只有\(4\)个,我们把它列出来.\((a,b)(a ...

  8. 【BZOJ4999】This Problem Is Too Simple!(线段树)

    [BZOJ4999]This Problem Is Too Simple!(线段树) 题面 BZOJ 题解 对于每个值,维护一棵线段树就好啦 动态开点,否则空间开不下 剩下的就是很简单的问题啦 当然了 ...

  9. 【BZOJ2300】[HAOI2011]防线修建 set维护凸包

    [BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...

随机推荐

  1. pytorch中的Linear Layer(线性层)

    LINEAR LAYERS Linear Examples: >>> m = nn.Linear(20, 30) >>> input = torch.randn(1 ...

  2. Netty源码分析第5章(ByteBuf)---->第1节: AbstractByteBuf

    Netty源码分析第五章: ByteBuf 概述: 熟悉Nio的小伙伴应该对jdk底层byteBuffer不会陌生, 也就是字节缓冲区, 主要用于对网络底层io进行读写, 当channel中有数据时, ...

  3. dirname命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/xiaofei125145/article/details/50620281 示例一 来自手册页的例子 $ dirname ...

  4. ifconfig命令详情

    基础命令学习目录首页 原文链接:https://blog.csdn.net/weixin_37886382/article/details/79716879 许多windows非常熟悉ipconfig ...

  5. pkill命令详解

    基础命令学习目录首页 原文链接:http://www.mamicode.com/info-detail-2315063.html 一:含义: 是ps命令和kill命令的结合,按照进程名来杀死指定进程, ...

  6. nginx之location(root/alias)

    location配置 1. 语法规则(按优先级) =        表示精确匹配,优先级最高 ^~      表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/s ...

  7. yarn (npm) 切换设置镜像源

    设置镜像源 1.查看一下当前源 yarn config get registry 2.切换为淘宝源 yarn config set registry https://registry.npm.taob ...

  8. js中使用对象注意

    var myObject = { hello: '你好', world : '世界' } 正常使用 myObject.hello   //输出你好 若引用的属性本身是一个变量: 需要用方括号使用 va ...

  9. Notes of Daily Scrum Meeting(11.13)

    Notes of Daily Scrum Meeting(11.13) 今天邹欣老师给我们讲课大家还是很有收获的,大家课堂的参与度确实有了很大的提升,而且邹欣老师关于项目Scrum Meeting报告 ...

  10. Daily Scrum (2015/10/21)

    今天可以说是项目正式开始的第一天,由于大家缺乏做团队项目的经验,对TFS的使用都还不太熟悉,所以今天大家的主要工作是熟悉TFS的使用和对代码进行初步的理解.我们预计需要2-3天时间来理解透彻源代码.以 ...