BZOJ 1101 莫比乌斯函数+分块
思路:
题目中的gcd(x,y)=d (x<=a,y<=b)可以转化成
求:gcd(x,y)=1 (1<=x<=a/d 1<=y<=b/d)
设 G(x,y)表示x<=a y<=b x,y互质 的数有多少组
F(a,b,k)表示有多少组x<=a y<=b gcd(x,y)>=k(注意是大于等于K)
这个很好求啊 就是(a/k)*(b/k)
G(x,y)=P1*F(a,b,1)+P2*F(a,b,2)+P3*F(a,b,3)+….+Px*F(a,b,x)
Ans=G(x,y)=ΣPx*(a/x)*(b/x)
这不就是个容斥原理嘛!
P就是莫比乌斯函数啊~
莫比乌斯函数是可以在线性时间内筛出来的~
这样我们就得到了预处理O(n)单词询问O(n/d)的方法
但是如果n很大 d很小 这个就是单词O(n)的了
怎么办呢
观察 这个式子ΣPx*(a/x)*(b/x) a/x的取值有sqrt(n)种
b/x的取值有sqrt(n)种
但是它们乘起来却不是O(n)种 而是sqrt(n)的!
预处理μ(x) 分块 求一下 完事~
//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 55555
int n,a,b,d,ans,pos,tot,mu[maxn],prime[maxn],sum[maxn],vis[maxn];
void shai(){
sum[1]=1;
for(int i=2;i<maxn;i++){
if(!vis[i])mu[i]=-1,prime[++tot]=i;
for(int j=1;j<=tot&&i*prime[j]<maxn;j++){
vis[i*prime[j]]=1,mu[i*prime[j]]=-mu[i];
if(i%prime[j]==0){mu[i*prime[j]]=0;break;}
}
sum[i]=sum[i-1]+mu[i];
}
}
int main(){
scanf("%d",&n);
shai();
while(n--){
scanf("%d%d%d",&a,&b,&d);
if(a>b)swap(a,b);
a/=d,b/=d,ans=0;
for(int i=1;i<=a;i=pos+1){
pos=min(a/(a/i),b/(b/i));
ans+=(sum[pos]-sum[i-1])*(a/i)*(b/i);
}
printf("%d\n",ans);
}
}
BZOJ 1101 莫比乌斯函数+分块的更多相关文章
- BZOJ 2301 莫比乌斯函数+分块
思路: 同BZOJ1101 就是加个容斥 - http://blog.csdn.net/qq_31785871/article/details/54340241 //By SiriusRen #inc ...
- BZOJ 2440 莫比乌斯函数+容斥+二分
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5473 Solved: 2679[Submit][Sta ...
- bzoj 1101 莫比乌斯反演
最裸的莫比乌斯 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defin ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...
- BZOJ 2440 [中山市选2011]完全平方数 (二分 + 莫比乌斯函数)
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4805 Solved: 2325[Submit][Sta ...
- [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】
题目链接:BZOJ - 2440 题目分析 首先,通过打表之类的方法可以知道,答案不会超过 2 * k . 那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个. ...
- bzoj 2440 (莫比乌斯函数)
bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4 9 16 25 36什么的 通过容斥原理,我们减去所有完全数 4有n/4个,但是36这种会被重复减去, ...
- BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数
BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ...
- BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 题意即求第\(k\)个无平方因子数. 无平方因子数(Square-Free Number),即分解之后所有质因 ...
随机推荐
- 通过修改路由,或者增加Route属性来控制访问webApi的路径
可以通过RouteConfig.cs文件中的路由规则来控制 通过为每个方法增加单独的[Route(“api/xx类/xx方法”)]
- C++函数的高级特性——小结
相对于C语言,C++增加了重载(overload).内联(inline).const和virtual四种新机制. 1 重载 只能靠参数列表而不能紧靠返回值类型的不同来区分重载函数.编译器根据参数列表为 ...
- CSS鼠标悬停图片加边框效果,页面布局发生错位的解决办法
CSS鼠标悬停图片加边框效果,页面布局发生错位的解决办法 .recomend-list{ width:1200px; a{ @extend %fl; margin-right: 30px; width ...
- CorelDRAW升级计划--如何购买
了解通过全新 CorelDRAW 2017升级计划更新此图形设计软件所有最新功能的实惠方案.助升级计划,您可以在下一主要产品版本推出时便收到该版本,从而始终使您的产品保持最新.升级计划取代为 X6 和 ...
- getattibute 与 getparameter区别
1.getAttribute是取得jsp中 用setAttribute设定的attribute 2.parameter得到的是string:attribute得到的是object 3.request ...
- Java根据当前日期获得昨天的当前日期代码实现
代码: import java.text.SimpleDateFormat; import java.util.Date; /** * 根据当前日期获得昨天的当前日期 * @author jinghu ...
- 多进程Socket_Server
import socketserverclass MyServer(socketserver.BaseRequestHandler): def handle(self): #继承BaseRequest ...
- 洛谷1099 [NOIP2007] 树网的核
链接https://www.luogu.org/problemnew/show/P1099 题目描述 设T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称TTT为 ...
- [读书笔记] R语言实战 (一) R语言介绍
典型数据分析的步骤: R语言:为统计计算和绘图而生的语言和环境 数据分析:统计学,机器学习 R的使用 1. 区分大小写的解释型语言 2. R语句赋值:<- 3. R注释: # 4. 创建向量 c ...
- debian 9 安装Virtual Box
1.去官网下载deb包,例如包名: virtualbox-.2_5.2.18-124319_Debian_stretch_amd64.deb 2.安装 .2_5.2.18-124319_Debian_ ...