[BZOJ1101][POI2007]Zap

FGD正在破解一段密码，他需要回答很多类似的问题：对于给定的整数a,b和d，有多少正整数对x,y，满足x<=a
，y<=b，并且gcd(x,y)=d。作为FGD的同学，FGD希望得到你的帮助。

[BZOJ2820]YY的GCD简化版。

```#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <set>
using namespace std;

const int BufferSize = 1 << 16;
inline char Getchar() {
int l = fread(buffer, 1, BufferSize, stdin);
Tail = (Head = buffer) + l;
}
}
int x = 0, f = 1; char c = Getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = Getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = Getchar(); }
return x * f;
}

#define maxn 50010
#define LL long long
int n;

int prime[maxn], cnt, u[maxn], sum[maxn];
bool vis[maxn];
void u_table() {
int N = maxn - 10;
u[1] = 1;
for(int i = 2; i <= N; i++) {
if(!vis[i]) prime[++cnt] = i, u[i] = -1;
for(int j = 1; j <= cnt && (LL)prime[j] * (LL)i <= (LL)N; j++)
if(i % prime[j]) vis[i*prime[j]] = 1, u[i*prime[j]] = -u[i];
else{ vis[i*prime[j]] = 1, u[i*prime[j]] = 0; break; }
}
for(int i = 1; i <= N; i++) sum[i] = sum[i-1] + u[i];
return ;
}

int main() {
u_table();

while(n--) {
if(a > b) swap(a, b); a /= d; b /= d;
int p = 1;
LL ans = 0;
for(; p <= a;) {
int np = p;
p = min(a / (a / np), b / (b / np));
ans += (LL)(sum[p] - sum[np-1]) * (LL)(a / np) * (LL)(b / np);
p++;
//			printf("%d\n", p);
}
printf("%lld\n", ans);
}

return 0;
}
```

## [BZOJ1101][POI2007]Zap的更多相关文章

1. 【莫比乌斯反演】BZOJ1101 [POI2007]zap

Description 回答T组询问,有多少组gcd(x,y)=d,x<=a, y<=b.T, a, b<=4e5. Solution 显然对于gcd=d的,应该把a/d b/d,然 ...

2. BZOJ 1101: [POI2007]Zap

1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2262  Solved: 895[Submit][Status] ...

3. BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )

求 answer = ∑ [gcd(x, y) = d] (1 <= x <= a, 1 <= y <= b) . 令a' = a / d, b' = b / d, 化简一下得 ...

4. BZOJ 1101 [POI2007]Zap（莫比乌斯反演）

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1101 [题目大意] 求[1,n][1,m]内gcd=k的情况 [题解] 考虑求[1,n ...

5. BZOJ 1101 [POI2007]Zap ——Dirichlet积

[题目分析] Dirichlet积+莫比乌斯函数. 对于莫比乌斯函数直接筛出处理前缀和. 对于后面向下取整的部分,可以分成sqrt(n)+sqrt(m)部分分别计算 学习了一下线性筛法. 积性函数可以 ...

6. 一些gcd计数问题

数论什么的全都忘光了吧QAQ 做了几道简单的题练习一下. bzoj1101: [POI2007]Zap 求有多少对数满足 gcd(x,y)=d, 1<=x<=a, 1<=y<= ...

7. （转载）关于gcd的8题

发现其实有关gcd的题目还是挺多的,这里根据做题顺序写出8题. [bzoj2818: Gcd] gcd(x,y)=质数, 1<=x,y<=n的对数 做这题的时候,懂得了一个非常重要的转化: ...

8. 【BZOJ】【1101】【POI2007】Zap

莫比乌斯反演 PoPoQQQ的讲义例一的一半……好吧这题是那题的基础部分= =很水…… WA了一次:因为没强制类型转换LL /************************************* ...

9. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

## 随机推荐

1. MP3文件信息批量更改器

以前(估计是2003年)编写一个MP3文件信息批量更改器MP3TagChanger,现放上来参考.(VB6编码) 使用方法很简单,会Winamp或者千千静听的就懂使用. http://pan.baid ...

2. scikit-learn一般实例之三:连接多个特征提取方法

在很多现实世界的例子中,有很多从数据集中提取特征的方法.很多时候我们需要结合多种方法获得好的效果.本例将展示怎样使用FeatureUnion通过主成分分析和单变量选择相进行特征结合. 结合使用转换器的 ...

3. serialize存入数组

原代码 def get_type type_list = "" if categories.include?"movie" type_list += " ...

4. java位运算符介绍

位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法 ...

5. 查询Oracle锁表和解决方法

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

6. Linux解压命令（tar）

tar zxvf phddns_raspberry.tgz tar默认解压到当前目录 参数: 运行tar时必须要有下列参数中的至少一个才可运行 -A, --catenate, --concatenat ...

7. Android SDK在线更新镜像服务器

http://www.cnblogs.com/tc310/p/4696731.html#_label0

8. ijg库解码超大型jpeg图片

1. ijg库解码超大型jpeg图片(>100M)的时候,如何避免内存溢出. 采用边解码边压缩的策略,每次解码一行或者若干行图片数据,然后对于这些解码的数据,进行DQT(量化处理,过滤掉高频的数 ...

9. char str[]和char *str的区别

1.http://blog.csdn.net/szchtx/article/details/10396149 char ss[]="C++";  ss[0]='c';        ...

10. Eclipse 设置文件的默认打开方式

web开发中,我们在编辑JSP/xml的时候,会碰到一个非常郁闷的事,直接双击打开的JSP页面,当我们在编辑的时候会到处跳,这个我是深有体会,所以我们就用右击 open with,但是久而久之我们会感 ...