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

思路:莫比乌斯反演,ans=solve(b/k,d/k)-solve((a-1)/k,d/k)-solve(b/k,(c-1)/k)+solve((a-1)/k,(c-1)/k)

代码1:超时。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; const int MAXN=;
bool check[MAXN+];
int prime[MAXN+];
int mu[MAXN+];
void Mobius(){
memset(check,false,sizeof(check));
mu[]=;
int tot=;
for(int i=;i<=MAXN;i++){
if(!check[i]){
prime[tot++]=i;
mu[i]=-;
}
for(int j=;j<tot;j++){
if(i*prime[j]>MAXN)break;
check[i*prime[j]]=true;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
else{
mu[i*prime[j]]=-mu[i];
}
}
}
}
//找[1,n],[1,m]内互质的数的对数
long long solve(int n,int m){
long long ans=;
if(n>m)swap(n,m);
for(int i=;i<=n;i++)
ans+=(long long)mu[i]*(n/i)*(m/i);
return ans;
} int main(){
Mobius();
int t;
int a,b,c,d,k;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
long long ans=solve(b/k,d/k)-solve((a-)/k,d/k)-solve(b/k,(c-)/k)+solve((a-)/k,(c-)/k);
printf("%lld\n",ans);
}
return ;
}

代码2:用到分块优化。待研究。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; const int MAXN=;
bool check[MAXN+];
int prime[MAXN+];
int mu[MAXN+];
void Mobius(){
memset(check,false,sizeof(check));
mu[]=;
int tot=;
for(int i=;i<=MAXN;i++){
if(!check[i]){
prime[tot++]=i;
mu[i]=-;
}
for(int j=;j<tot;j++){
if(i*prime[j]>MAXN)break;
check[i*prime[j]]=true;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
else{
mu[i*prime[j]]=-mu[i];
}
}
}
}
int sum[MAXN+];
//找[1,n],[1,m]内互质的数的对数
long long solve(int n,int m){
long long ans=;
if(n>m)swap(n,m);
for(int i=,la=;i<=n;i=la+){
la=min(n/(n/i),m/(m/i));
ans+=(long long)(sum[la]-sum[i-])*(n/i)*(m/i);
}
return ans;
} int main(){
Mobius();
sum[]=;
for(int i=;i<=MAXN;i++)
sum[i]=sum[i-]+mu[i];
int t;
int a,b,c,d,k;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
long long ans=solve(b/k,d/k)-solve((a-)/k,d/k)-solve(b/k,(c-)/k)+solve((a-)/k,(c-)/k);
printf("%lld\n",ans);
}
return ;
}

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

  1. Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)

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

  2. BZOJ 2301: [HAOI2011]Problem b 莫比乌斯反演

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1007  Solved: 415[Submit][ ...

  3. BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)

    [Update] 我好像现在都看不懂我当时在写什么了=-= \(Description\) 求\(\sum_{i=a}^b\sum_{j=c}^d[(i,j)=k]\) \(Solution\) 首先 ...

  4. BZOJ 2301 [HAOI2011]Problem b ——莫比乌斯反演

    分成四块进行计算,这是显而易见的.(雾) 然后考虑计算$\sum_{i=1}^n|sum_{j=1}^m gcd(i,j)=k$ 首先可以把n,m/=k,就变成统计&i<=n,j< ...

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

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

  6. bzoj 2301: [HAOI2011]Problem b mobius反演 RE

    http://www.lydsy.com/JudgeOnline/problem.php?id=2301 设f(i)为在区间[1, n]和区间[1, m]中,gcd(x, y) = i的个数. 设F( ...

  7. [bzoj2301]Problem b莫比乌斯反演+分块优化

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

  8. BZOJ 2301 [HAOI2011]Problem b (分块 + 莫比乌斯反演)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 6519  Solved: 3026[Submit] ...

  9. BZOJ 2301: [HAOI2011]Problem b (莫比乌斯反演)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 436  Solved: 187[Submit][S ...

  10. bzoj 2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 3757 Solved: 1671 [Submit] ...

随机推荐

  1. py3.6 + xadmin的自学网站搭建

    xadmin安装 由于安装时需要依赖包并且暂时不支持py3等原因,直接pip install的方法很容易就狗带了. 说一下我在网上找到的安装方式,在GitHub上有这个项目的开源代码,并且还有很多个版 ...

  2. Tengine的concat模块与js、css合并

    首先,先走出一个误区 ,下面是tengine-cn邮件列表里的一篇邮件原文:“看了这个例子就了解了,这个所谓的合并请求只是把所有的CSS或JAVASCRIPT请求合并,必须是同一个文件类型的.我开始想 ...

  3. Django实现的博客系统中使用富文本编辑器ckeditor

    操作系统为OS X 10.9.2,Django为1.6.5. 1.下载和安装 1.1 安装 ckeditor 下载地址 https://github.com/shaunsephton/django-c ...

  4. 洛谷——P2733 家的范围 Home on the Range

    P2733 家的范围 Home on the Range 题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因为一些原因,他的奶牛只在正方形 ...

  5. 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)

    我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了class的文件结构,在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下 ...

  6. Linux出现cannot create temp file for here-document: No space left on device的问题解决

    在终端输入:cd /ho 按tab键时,显示错误: bash: cannot create temp file for here-document: No space left on device 这 ...

  7. 用JS过滤Emoji表情的输入

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6773854.html 在前端页面开发过程中,总会碰到不允许 ...

  8. 手游产品经理初探(八)CasinoStar玩家离开原因分析

    通过Delta DNA分析报告.综合我们的游戏进行思考,我总结了几条玩家流失的经验: 1.在有限的前60秒我们没有花足够的精力去吸引玩家.就是说我们要花大量的经历在玩家进入游戏的60秒的体验上(我的澳 ...

  9. vimrc 避免中文乱码配置

    et smsyntax onset ts=4set sts=4set sw=4set hlsearchset rulerset backspace=indent,eol,startset encodi ...

  10. javascript读取和改动原型特别须要注意的事儿,由于原型的读写不具有对等性

    对于从原型对象继承而来的成员,其读和写具有内在的不正确等性.比方有一个对象A,假设它的原型对象是B.B的原型对象是null.假设我们须要读取A对象的name属性值,那么JS会优先在A中查找.假设找到了 ...