BZOJ 2301 Problem b
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2301
冬令营听了莫比乌斯,这就是宋老师上课讲的例题咯[今天来实现一下]
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; inline int in(){
int x=;char ch=getchar();
while(ch>'' || ch<'') ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return x;
} const int maxn=; int mu[maxn],s[maxn];
int Prime[maxn],cnt;
bool no_prime[maxn]; void get_prime(){
int tmp;mu[]=;
for(int i=;i<maxn;i++){
if(!no_prime[i]) Prime[++cnt]=i,mu[i]=-;
for(int j=;j<=cnt && ((tmp=Prime[j]*i)<maxn);j++){
no_prime[tmp]=true;
if(i%Prime[j]==){mu[tmp]=;break;}
mu[tmp]=-mu[i];
}
}
for(int i=;i<maxn;i++) s[i]=s[i-]+mu[i];
} //j表示在所有数x中n/x=n/i的最后一个
long long calcu(int n,int m){
long long sum=;
if(n>m) swap(n,m);
for(int i=,j=;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
sum+=(long long)(s[j]-s[i-])*(m/i)*(n/i);
}
return sum;
} int main(){
#ifndef ONLINE_JUDGE
freopen("2301.in","r",stdin);
freopen("2301.out","w",stdout);
#endif int T,a,b,c,d,k;
long long ans; get_prime();
T=in();
while(T--){
a=in(),b=in(),c=in(),d=in(),k=in();
ans=calcu(b/k,d/k)-calcu(b/k,(c-)/k)-calcu((a-)/k,d/k)+calcu((a-)/k,(c-)/k);
printf("%lld\n",ans);
} return ;
}
[感觉还是说一下怎么做吧...]不过建议大家还是找个ppt来看好啦[我没有图啊...]
首先将问题变成询问[i=1...n][j=1...m]中有多少gcd(i,j)==k的数
然后其实就是[i=1...n/k][j=1...m/k]中gcd(i,j)==1的数
然后设f(n,m,k)表示[i=1...n/k][j=1...m/k]中gcd(i,j)==1的个数
g(n,m,k)表示[i=1...n/k][j=1...m/k]中gcd(i,j)是1的倍数的个数 <- 小学生都知道这个等于(n/k)*(m/k)是吧
所以 这一步直接由定义推来
这一步直接由定义推来
然后莫比乌斯反演一下

然后再把g(n,m,k)的公式带一下

就是这个样子了...
然后发现有一大部分的数值是相同的,然后就可以看代码的分块了...
BZOJ 2301 Problem b的更多相关文章
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)
		首先我们来看一道题 BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ... 
- BZOJ 2301 Problem b(莫比乌斯函数)
		题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2301 题意:每次给出a,b,c,d,K.求有多少数对(x,y)满足a<=x< ... 
- BZOJ 2301 Problem B(莫比乌斯反演)
		http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题意:给a,b,c,d,k,求gcd(x,y)==k的个数(a<=x<=b,c&l ... 
- BZoj 2301 Problem b(容斥定理+莫比乌斯反演)
		2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 7732 Solved: 3750 [Submi ... 
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
		题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ... 
- BZOJ 2301 Problem b (莫比乌斯反演+容斥)
		这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ... 
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
		Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ... 
- [BZOJ 2301] [HAOI 2011] Problem b (莫比乌斯反演)(有证明)
		[BZOJ 2301] [HAOI 2011] Problem b (莫比乌斯反演)(有证明) 题面 T组询问,每次给出a,b,c,d,k,求\(\sum _{i=a}^b\sum _{j=c}^d[ ... 
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
		2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ... 
随机推荐
- 使用memcached实现tomcat集群session共享
			环境centos6.7,下载安装必要的软件:yum -y install epel-release(tomcat7在此源上,tomcat7是现在主流版本) yum -y install tomcat ... 
- ViewGroup 和 View 事件传递及处理小谈
			前言 在自定义组件的时候少不了会去处理一些事件相关的东西,关于事件这块网上有很多文章,有说的对的也有说的不对的,我在理解的时候也有过一段时间的迷惑,现在把自己理解的东西写下来,给有相同疑问的朋友提供些 ... 
- HUE 忘记密码
			解决方法: 启动HUE的Shell /opt/cloudera/parcels/CDH/lib/hue/build/env/bin/hue shell from django.contrib.auth ... 
- Php  output buffering缓存及程序缓存
			在php中有时为了控制程序的输出显示顺序,提供了output buffering缓存(php自身缓存机制). 若Ob缓存开启,需要输出的就先存在ob缓存里,再到程序缓存里.若没有开启,则直接进入 ... 
- 魅族MX3问题集锦
			我第一台智能机已经服役2年半了,已经满足不了现在日益庞大的APP,所以打算让他光荣退役.我觉得IPhone仍然是目前做的最好的手机,但是对于我来说好像没什么必要,尤其那土豪般的价格.而且我平时看视频居 ... 
- C#的编译
			Windows上的编译 1:先将C:\Windows\Microsoft.NET\Framework\v3.5配置到系统环境变量的path里. 2:写C#代码 demo1.txt using Syst ... 
- 在EF的code frist下写稳健的权限管理系统:数据库模型(二)
			先从数据库开始,因为是用EF的code frist,所以所有的设计都在解决项目中进行. 先是数据模型开始 我已经建立了四个模型,user,role,action,actiongroup user里面有 ... 
- 刀哥多线程之一次性代码gcd-11-once
			一次性执行 有的时候,在程序开发中,有些代码只想从程序启动就只执行一次,典型的应用场景就是"单例" // MARK: 一次性执行 - (void)once { static dis ... 
- SQL语句中各种数据类型转换方法总结
			1.Access 每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(e ... 
- .NET开源工作流RoadFlow-流程设计-流转条件设置(路由)
			当一个步骤后面有多个步骤时,可以设置为根据设置条件系统自动判断该流向哪些步骤,也叫路由. roadflow没有单独的路由步骤来设置条件,流程条件通过双击连线弹出条件设置框来设置. 1.sql条件 即通 ... 
