BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

时间:2022-03-02 19:24:45

Description

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

Input

第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k

Output

共n行,每行一个整数表示满足要求的数对(x,y)的个数

Sample Input

2

2 5 1 5 1

1 5 1 5 2

Sample Output

14

3

HINT

100%的数据满足:1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000

题解:这道题其实和之前那道hdu1695很像,反演之后的大函数很好推

BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

根据容斥原理,答案应该为

BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

其中前一个数为i的上界,后一个数为j的上界

但是我们发现这是O(n^2)的,还是会TLE

这个时候要用一个看着非常dark的方法来优化

这玩意被称之为

分块!

分块!!

分块!!!

其实是假的了

因为我们观察之前的代码:

BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

我们会发现在i极其接近b的时候

在很长的一大段中b/i和d/i都是不变的

所以我们完全可以先处理出莫比乌斯函数的前缀和,然后用前缀和乘上这整个大小不变的块的值即可

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define hi puts("hi");
using namespace std; int vis[],p[],mu[],sum[],cnt,n,a,b,c,d,k;; void get()
{
memset(vis,,sizeof(vis));
cnt=;
mu[]=;
vis[]=;
for(int i=;i<=;i++)
{
if(!vis[i])
{
p[cnt++]=i;
mu[i]=-;
}
for(int j=;j<cnt;j++)
{
if(p[j]*i>)
{
break;
}
vis[i*p[j]]=;
if(!(i%p[j]))
{
mu[i*p[j]]=;
break;
}
else
{
mu[i*p[j]]=-mu[i];
}
}
}
} long long solve(int x,int y)
{
long long last=;
x/=k;
y/=k;
long long ans=;
if(x>y)
{
swap(x,y);
}
for(int i=;i<=x;i=last+)
{
last=min(x/(x/i),y/(y/i));
ans+=(long long)(sum[last]-sum[i-])*(y/i)*(x/i);
}
return ans;
} int main()
{
get();
for(int i=;i<=;i++)
{
sum[i]=sum[i-]+mu[i];
}
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
long long ans=solve(b,d)+solve(a-,c-)-solve(a-,d)-solve(c-,b);
printf("%lld\n",ans);
}
}

BZOJ 2301 Problem b(莫比乌斯反演+分块优化)的更多相关文章

  1. &lbrack;bzoj2301&rsqb;Problem b莫比乌斯反演&plus;分块优化

    题意: $\sum\limits_{\begin{array}{*{20}{c}}{a < = x < = b}\\{c < = y < = d}\end{array}} {\ ...

  2. BZOJ 2301 Problem B&lpar;莫比乌斯反演&rpar;

    http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题意:给a,b,c,d,k,求gcd(x,y)==k的个数(a<=x<=b,c&l ...

  3. BZOJ 2301 Problem b &lpar;莫比乌斯反演&plus;容斥&rpar;

    这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ...

  4. BZOJ 2301 Problem b(莫比乌斯反演&plus;分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...

  5. bzoj 2301 &lbrack;HAOI2011&rsqb;Problem b(莫比乌斯反演&plus;分块优化)

    题意:对于给出的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, ...

  6. &lbrack;BZOJ 2301&rsqb; &lbrack;HAOI 2011&rsqb; Problem b &lpar;莫比乌斯反演&rpar;&lpar;有证明&rpar;

    [BZOJ 2301] [HAOI 2011] Problem b (莫比乌斯反演)(有证明) 题面 T组询问,每次给出a,b,c,d,k,求\(\sum _{i=a}^b\sum _{j=c}^d[ ...

  7. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化&lpar;bzoj 2301 Problem b&amp&semi;&amp&semi;bzoj 2820 YY的GCD&amp&semi;&amp&semi;BZOJ 3529 数表&rpar;

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  8. Bzoj 2301&colon; &lbrack;HAOI2011&rsqb;Problem b&lpar;莫比乌斯反演&plus;除法分块&rpar;

    2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ...

  9. &lbrack;HAOI2011&rsqb;&lbrack;bzoj2301&rsqb; Problem b &lbrack;莫比乌斯反演&plus;容斥原理&plus;分块前缀和优化&rsqb;

    题面: 传送门 有洛谷就尽量放洛谷链接呗,界面友好一点 思路: 和HDU1695比较像,但是这一回有50000组数据,直接莫比乌斯反演慢慢加的话会T 先解决一个前置问题:怎么处理a,c不是1的情况? ...

随机推荐

  1. Ubuntu操作系统相关

    1.安装 三种网络类型 修改密码 重启unbuntu系统,出现starting启动界面后,长按shift键. 出现如下引导界面: (注意:这里保持默认的选项就行,即白色横条选择在*Ubuntu上,不要 ...

  2. Unity时钟定时器插件

    Unity时钟定时器插件 http://dsqiu.iteye.com/blog/2020603https://github.com/joserocha3/KillerCircles/blob/67a ...

  3. 【云计算】docker相关开源项目、工具

    十大基于Docker的开发工具 作者                     郭蕾        发布于     2014年8月19日     |              注意:QCon全球软件开发 ...

  4. apk反编译&lpar;4&rpar;Smali代码注入

    转自 : http://blog.sina.com.cn/s/blog_5674d18801019i89.html 应用场景 Smali代码注入只能应对函数级别的移植,对于类级别的移植是无能为力的.具 ...

  5. Django-数据库访问优化

    数据库访问优化 使用标准数据库优化技巧 索引.我们可以使用Field.db_index或者Meta.index_together在Django中添加索引,优先向经常使用filter(),exclude ...

  6. RF无线射频电路设计干货分享

    1.概述:射频(RF)PCB设计,在目前公开出版的理论上具有很多不确定性,常被形容为一种“黑色艺术”.通常情况下,对于微波以下频段的电路(包括低频和低频数字电路),在全面掌握各类设计原则前提下的仔细规 ...

  7. PHP 常用设计模式 &lpar;转载&rpar;

    1.单例模式 单例模式顾名思义,就是只有一个实例.作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的要点有三个: 一是某个类只能有一个实例: ...

  8. sklearn 数据预处理1&colon; StandardScaler

    作用:去均值和方差归一化.且是针对每一个特征维度来做的,而不是针对样本. [注:] 并不是所有的标准化都能给estimator带来好处. “Standardization of a dataset i ...

  9. OpenCV学习代码记录——canny边缘检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  10. 电脑同时安装python2和python3&comma; 如何实现切换使用

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...