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

2
4 5 2
6 4 3

Sample Output

3
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的数对个数)相关推荐

  1. BZOJ 1101: [POI2007]Zap

    题目 1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题: ...

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

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

  3. 莫比乌斯函数(bzoj 1101: [POI2007]Zap)

    莫比乌斯反演: http://blog.csdn.net/acdreamers/article/details/8542292 课件:https://wenku.baidu.com/view/fbec ...

  4. [BZOJ1101][POI2007]Zap

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2732  Solved: 1164 [Submit][Stat ...

  5. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...

  6. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)

    URL: (Luogu)https://www.luogu.org/problem/show?pid=3455 (BZOJ)http://www.lydsy.com/JudgeOnline/probl ...

  7. BZOJ1101 洛谷3455:[POI2007]ZAP——题解

    https://www.luogu.org/problemnew/show/3455#sub http://www.lydsy.com/JudgeOnline/problem.php?id=1101 ...

  8. 莫比乌斯入门:bzoj 1101 Zap(Mobius)

    传送门 题解: #include<bits/stdc++.h> using namespace std; const int MAXN=50002,INF=0x3f3f3f3f; int ...

  9. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

最新文章

  1. mysql插入性能_mysql 数据量大时插入和查询性能
  2. 关于Java中的JDBC使用和数据库(SQL Server)连接之后的一些操作
  3. 慕课python第四周测试卷_中国大学慕课用Python玩转数据期末考试查题公众号答案...
  4. dl 系列服务器,DL系列服务器内存总结..doc
  5. 分布式锁-zk临时节点
  6. HDU - 6899 Xor(数位dp)
  7. 140.String Compression
  8. springboot全局异常处理_SpringBoot:如何优雅地处理全局异常
  9. python自学-新手如何自学python课程?
  10. 开关电源仿真与设计基于spice 第2版 中译本_亚成微招聘模拟IC设计师、FAE工程师、系统测试工程师...
  11. PIL ellipse函数画椭圆
  12. 山大2019计算机学院夏令营,关于举办山东大学2019年环境学科优秀大学生暑期夏令营公告...
  13. 51单片机程序存储器和数据存…
  14. 你和你的女神之间,差了一个OpenCV口红色号识别器
  15. 【华为机试真题 Python实现】机器人走迷宫
  16. 公文管理系统案例展示
  17. 从零开始的MSP430单片机学习(一)
  18. frameset框架属性
  19. 1亿美元成为超级富豪新基准,美国、中国、印度亿万富翁数量排全球前三位 | 美通社头条...
  20. 赴京领SOA年度明星博客奖后记

热门文章

  1. 文正·高等数学每日一题(2)·一道“小学生”面积题
  2. 计算机管理里显示磁盘丢失,Win10硬盘分区丢失,在磁盘管理中找不到
  3. C和C++面试秘籍(董山海)分享
  4. 完整性约束及其违约处理
  5. 解决微信小程序无法访问后台服务器问题
  6. MPAndroidChart蜘蛛网雷达图
  7. AI机器人系统工作中是如何识别空号的
  8. Spring Boot实现 RabbitMQ教程【1】
  9. sql 大于号小于号显示问题
  10. 图文详解crond定时任务