BZOJ 1101([POI2007]Zap-满足x=ay=bgcd(x,y)=d的数对个数)
1101: [POI2007]Zap
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1646 Solved: 577
[Submit][Status][Discuss]
Description
FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d。作为FGD的同学,FGD希望得到你的帮助。
Input
第一行包含一个正整数n,表示一共有n组询问。(1<=n<= 50000)接下来n行,每行表示一个询问,每行三个正整数,分别为a,b,d。(1<=d<=a,b<=50000)
Output
对于每组询问,输出到输出文件zap.out一个正整数,表示满足条件的整数对数。
Sample Input
4 5 2
6 4 3
Sample Output
2
HINT
对于第一组询问,满足条件的整数对有(2,2),(2,4),(4,2)。对于第二组询问,满足条件的整数对有(6,3),(3,3)。
Source
本题为mobius反演:
PS:计算过程不能用long long 不然TLE
公式推导
这部分让我们看看PoPoQQQ的PPT《莫比乌斯反演》
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define MEM(a) memset(a,0,sizeof(a));
#define MAXN (50000+10)
typedef long long ll;
int p[MAXN]={0},tot;
bool b[MAXN]={0};
int mu[MAXN]={0},sum[MAXN]={0};inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'&&ch>'9') { if (ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); }return x*f;
}void make_prime(int n)
{tot=0; mu[1]=1;Fork(i,2,n){if (!b[i]) p[++tot]=i,mu[i]=-1;For(j,tot){if (i*p[j]>n) break;b[i*p[j]]=1;if (i%p[j]==0) { mu[i*p[j]]=0; break; }mu[i*p[j]]=-mu[i]; }}sum[0]=0;For(i,n) sum[i]=sum[i-1]+mu[i];
}
int n,m,d;
int calc() {int ans=0;for(int i=1,last=1;i<=n;i=last+1) {last=min(n/(n/i),m/(m/i));ans+=(sum[last]-sum[i-1])*(n/i)*(m/i);}printf("%d\n",ans);return ans;
}int main()
{
// freopen("bzoj1101.in","r",stdin);MEM(p) MEM(b) MEM(mu) MEM(sum)int N = 50000;make_prime(N); int T;T=read();while(T--){n=read(); m=read(); d=read(); if (n>m) swap(n,m);n/=d,m/=d;calc();}return 0;
}
BZOJ 1101([POI2007]Zap-满足x=ay=bgcd(x,y)=d的数对个数)相关推荐
- BZOJ 1101: [POI2007]Zap
题目 1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题: ...
- BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
求 answer = ∑ [gcd(x, y) = d] (1 <= x <= a, 1 <= y <= b) . 令a' = a / d, b' = b / d, 化简一下得 ...
- 莫比乌斯函数(bzoj 1101: [POI2007]Zap)
莫比乌斯反演: http://blog.csdn.net/acdreamers/article/details/8542292 课件:https://wenku.baidu.com/view/fbec ...
- [BZOJ1101][POI2007]Zap
1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2732 Solved: 1164 [Submit][Stat ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)
URL: (Luogu)https://www.luogu.org/problem/show?pid=3455 (BZOJ)http://www.lydsy.com/JudgeOnline/probl ...
- BZOJ1101 洛谷3455:[POI2007]ZAP——题解
https://www.luogu.org/problemnew/show/3455#sub http://www.lydsy.com/JudgeOnline/problem.php?id=1101 ...
- 莫比乌斯入门:bzoj 1101 Zap(Mobius)
传送门 题解: #include<bits/stdc++.h> using namespace std; const int MAXN=50002,INF=0x3f3f3f3f; int ...
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...
最新文章
- mysql插入性能_mysql 数据量大时插入和查询性能
- 关于Java中的JDBC使用和数据库(SQL Server)连接之后的一些操作
- 慕课python第四周测试卷_中国大学慕课用Python玩转数据期末考试查题公众号答案...
- dl 系列服务器,DL系列服务器内存总结..doc
- 分布式锁-zk临时节点
- HDU - 6899 Xor(数位dp)
- 140.String Compression
- springboot全局异常处理_SpringBoot:如何优雅地处理全局异常
- python自学-新手如何自学python课程?
- 开关电源仿真与设计基于spice 第2版 中译本_亚成微招聘模拟IC设计师、FAE工程师、系统测试工程师...
- PIL ellipse函数画椭圆
- 山大2019计算机学院夏令营,关于举办山东大学2019年环境学科优秀大学生暑期夏令营公告...
- 51单片机程序存储器和数据存…
- 你和你的女神之间,差了一个OpenCV口红色号识别器
- 【华为机试真题 Python实现】机器人走迷宫
- 公文管理系统案例展示
- 从零开始的MSP430单片机学习(一)
- frameset框架属性
- 1亿美元成为超级富豪新基准,美国、中国、印度亿万富翁数量排全球前三位 | 美通社头条...
- 赴京领SOA年度明星博客奖后记