【莫比乌斯反演+分块】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 ...
随机推荐
- 安卓中使用iconfont
https://www.cnblogs.com/dongweiq/p/5730212.html
- VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'
转摘自:http://preceo.blog.51cto.com/6225017/1130931 近来写程序时发现了一个问题,用 VC 编译 C语言是 总是提示一个错误:error C2143: sy ...
- demo 集合
github: https://github.com/zhanghaifeng1234565/ProjectFunctionCollect https://github.com/XY-W ...
- 51Nod 1118 机器人走方格--求逆元
(x/y) %mod =x*(y^(mod-2))%mod; 在算x,y的时候可以一直mod 来缩小 y^(mod-2)显然是个快速幂 #include <iostream> #inclu ...
- request.getParameterValues与request.getParameter的区别
一. 简单的对比 request.getParameter用的比较多,相对熟悉 request.getParameterValues(String name)是获得如checkbox类(名字相同, ...
- 【Foreign】字符串匹配 [KMP]
字符串匹配 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input 3 3 6 3 1 2 1 2 ...
- python-自定义分页组件
使用方法 """ 自定义分页组件的使用方法: pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST ...
- Perl语言入门--3--文件读取与写入
现有文件test.txt,内容为:"123\n456" 1,打开文本test.txt #!/usr/bin/perl open d,"test.txt"; d ...
- Tomcat下载安装及常见问题解决办法
一.Tomcat的下载: 下载地址:http://tomcat.apache.org/ 下载Tomcat6.0(在左侧的Download下,考虑到稳定性现在企业大部分还在用Tomcat6.0) (1) ...
- JavaScript ES6部分语法
ES6是JavaScript语言的新版本,它也可以叫做ES2015,之前学习的JavaScript属于ES5,ES6在它的基础上增加了一些语法,ES6是未来JavaScript的趋势,而且vue组件开 ...