【莫比乌斯反演+分块】BZOJ1101-[POI2007]Zap
【题目大意】
对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d。
【思路】
前面的思路同HDU1695
不过不同的是这道题中(a,b)和(b,a)算作同一种情况,不需要再减去重复的情况。
这道题运用了分块加快效率。我们可以注意到
是相同的,b'(b'/i)b表示和当前商相同的最后一位[b'/d],d'(d'/i)同理,pos为两者中较小的一个。我们预处理Miu的前缀和,就可以将一样的
*(sum[pos]-pos[k-1])即可!
??BZOJ一定要用printf%lld,cout会RE??
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=+;
const int INF=0x7ffffff;
int a,b,d;
int miu[MAXN];
int miu_sum[MAXN]; void get_miu(int maxn)
{
int prime[MAXN],pnum=;
memset(miu_sum,,sizeof(miu_sum));
miu[]=miu_sum[]=;
for (int i=;i<maxn;i++) miu[i]=-INF;
for (int i=;i<maxn;i++)
{
if (miu[i]==-INF)
{
miu[i]=-;
prime[++pnum]=i;
}
for (int j=;j<=pnum;j++)
{
if (i*prime[j]>=maxn) break;
if (i%prime[j]==) miu[i*prime[j]]=;
else miu[i*prime[j]]=-miu[i];
}
miu_sum[i]=miu_sum[i-]+miu[i];
}
} ll get_ans(int a,int b,int d)
{
int ub=min(a,b),pos;
ll ans=;
for (int i=;i<=ub;i=pos+)
{
pos=min(a/(a/i),b/(b/i));
ans+=(ll)(miu_sum[pos]-miu_sum[i-])*(a/i)*(b/i);
}
return ans;
} int main()
{
int T;
scanf("%d",&T);
get_miu(MAXN-);
for (int i=;i<T;i++)
{
scanf("%d%d%d",&a,&b,&d);
a/=d;b/=d;
printf("%lld\n",get_ans(a,b,d));
}
}
【莫比乌斯反演+分块】BZOJ1101-[POI2007]Zap的更多相关文章
- 【莫比乌斯反演】BZOJ1101 [POI2007]zap
Description 回答T组询问,有多少组gcd(x,y)=d,x<=a, y<=b.T, a, b<=4e5. Solution 显然对于gcd=d的,应该把a/d b/d,然 ...
- 莫比乌斯反演学习笔记+[POI2007]Zap(洛谷P3455,BZOJ1101)
先看一道例题:[POI2007]Zap BZOJ 洛谷 题目大意:$T$ 组数据,求 $\sum^n_{i=1}\sum^m_{j=1}[gcd(i,j)=k]$ $1\leq T\leq 50000 ...
- BZOJ1101 POI2007 Zap 【莫比乌斯反演】
BZOJ1101 POI2007 Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b, ...
- [BZOJ1101][POI2007]Zap
[BZOJ1101][POI2007]Zap 试题描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd ...
- Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...
- BZOJ1101: [POI2007]Zap(莫比乌斯反演)
1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2951 Solved: 1293[Submit][Status ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...
- bzoj2301(莫比乌斯反演+分块)
传送门:2301: [HAOI2011]Problem b 题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
随机推荐
- sls语法:创建file,创建文件夹
http://blog.kukafei520.net/html/2014/942.html /tmp/aaa.txt: file.managed /tmp/salt_test: file.direct ...
- bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数
[Lydsy1704月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 577 Solved: 201[Submit][Status][Di ...
- iOS 控制台打印unicode 转中文汉字 UTF8String
今天查看代码数据结构,就在控台直接打印了,soGa,我看到了什么!!!! 于是乎想到了不对劲,不对呀,之前打印都是 UTF8String的呀,怎么会这样,百思不得其姐,看了一下封装的网络类,SoGa, ...
- HDU4889 Scary Path Finding Algorithm
Fackyyj loves the challenge phase in TwosigmaCrap(TC). One day, he meet a task asking him to find sh ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- WC后记
这次去WC本来就是抱着玩儿玩儿的心态去的,结果真算是玩儿了... 我们去的内天北京正好下雪,结果后来等我舅接我们去八十中的时候还在外面等了半个小时,其实雪天在外面挺好的,除了旁边都是一些男程序员.后来 ...
- Linux 查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- C#字节数组的常用解码处理方法
在某些情况下,比如说串口通信或者读取二进制的文件,通常会得到一个byte数组形式的数据. 然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字 ...
- Android局域网访问webservice以及其中的一些问题
应老师的要求,要做个安卓app,实现备份app上的数据到服务器上的mongodb上,网上搜了下相关的实现方式.利用webservice技术,具体来说就是客户端直接调用服务器端的接口.之前从来没接触这玩 ...
- springboot 通用Mapper使用
https://blog.csdn.net/dwf_android/article/details/79359360 https://www.cnblogs.com/larryzeal/p/58741 ...