[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=1101

[算法]

首先 , 问题可以转化为求GCD(x,y) = 1,x <= a / d , y <= b / d,的二元组个数

令F(a,b,d)表示x <= a , y <= b , d | GCD(x,y)的二元组个数 , 显然 , 只需保证x和y都为d的倍数即可 , 因此 , F(a,b,d) = [a / d][b / d](其中,"[]"表示向下取整)

那么 , 要求互质的二元组个数 , 可以通过容斥原理进行计算 :

在没有限制的情况下 , 共有a * b对二元组 , 需要将答案减去公约数是2 , 3 , 5 , 7等素数的倍数的二元组 , 但这样会多减了如公约数为2且3的倍数的二元组 , 需要加上它。

不难发现 , Answer = sigma( miu(i) * F(a,b,i) )(1 <= i <= min(a,b) , miu为莫比乌斯函数)

可以通过数论分块快速计算 , 时间复杂度 : O(T * (sqrt(A) + sqrt(B)) ( 其中,sqrt表示开根号)

#include<bits/stdc++.h>
using namespace std;
#define MAXN 50010 int T,a,b,d;
int miu[MAXN],sum[MAXN]; inline void sieve()
{
static bool visited[MAXN];
for (int i = ; i < MAXN; i++)
{
visited[i] = false;
miu[i] = ;
}
for (int i = ; i < MAXN; i++)
{
if (visited[i]) continue;
miu[i] = -;
for (int j = * i; j < MAXN; j += i)
{
visited[j] = true;
if ((j / i) % i == ) miu[j] = ;
else miu[j] *= -;
}
}
for (int i = ; i < MAXN; i++) sum[i] = sum[i - ] + miu[i];
}
inline int getsum(int l,int r)
{
return sum[r] - sum[l - ];
}
inline int solve(int x,int y)
{
int gi;
int ret = ;
for (int i = ; i <= min(x,y); i = gi + )
{
gi = min((x / (x / i)),(y / (y / i)));
ret += (x / i) * (y / i) * getsum(i,gi);
}
return ret;
} int main()
{ scanf("%d",&T);
sieve();
while (T--)
{
scanf("%d%d%d",&a,&b,&d);
printf("%d\n",solve(a / d,b / d));
} return ; }

[POI 2007] Zap的更多相关文章

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

    手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...

  2. [POI 2007]ZAP-Queries

    Description Byteasar the Cryptographer works on breaking the code of BSA (Byteotian Security Agency) ...

  3. 解题:POI 2007 Tourist Attractions

    题面 事实上这份代码在洛谷过不去,因为好像要用到一些压缩空间的技巧,我并不想(hui)写(捂脸) 先预处理$1$到$k+1$这些点之间相互的最短路和它们到终点的最短路,并记录下每个点能够转移到时的状态 ...

  4. 解题:POI 2007 Driving Exam

    题面 有点意思的题 从一个位置$i$出发可以到达每一个位置即是从$1,n$出发可以到达$i$.然后有了一个做法:把图上下反转后建反图,这样就可以求从一个点$i$到达左右两侧的花费$dp[i][0/1] ...

  5. 解题:POI 2007 Weights

    题面 这是个$O(nlog^2$ $n)$的解法,因为蒟蒻博主没有看懂$O(nlog$ $n)$的更优秀的解法 显然从小到大装砝码是最优的方法,又显然从大到小装容器不会使得答案变劣,还显然砝码数具有单 ...

  6. [POI 2007] 办公楼

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1098 [算法] 显然 , 答案为补图的连通分量个数 用链表优化BFS , 时间复杂度 ...

  7. [POI 2007] 堆积木

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1109 [算法] DP [代码] #include<bits/stdc++.h& ...

  8. 【POI 2007】 山峰和山谷

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1102 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...

  9. [POI 2007] 旅游景点

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1097 [算法] 首先,用Dijkstra算法求出2-k+1到每个点的最短路 然后,我 ...

随机推荐

  1. 梦想CAD控件安卓界面控制

    CAD控件界面上所有元素都可以控制显示或隐藏,下面将逐一介绍详细用法. 设置工具文件 MxFunction.setToolFile 设置工具文件.详细说明如下: 参数 说明 String sFile ...

  2. ThinkPHP---thinkphp会话支持和文件载入

    [一]会话控制 会话支持一般指cookie和session,在ThinkPHP里为了方便开发,封装了cookie和session方法. (1)session方法 在函数库封装了session方法 se ...

  3. printf函数压栈(i++/i--,++i/--i) 终极解密

    #include <stdio.h> void main() { ; printf("%d %d %d %d\n", i, --i, i, i--); } 输出是“3 ...

  4. Educational Codeforces Round 57 (Rated for Div. 2) 前三个题补题

    感慨 最终就做出来一个题,第二题差一点公式想错了,又是一波掉分,不过我相信我一定能爬上去的 A Find Divisible(思维) 上来就T了,后来直接想到了题解的O(1)解法,直接输出左边界和左边 ...

  5. MySQL数据库开启、关闭、查看函数功能的方法

    应用 MySQL 时,会遇到不能创建函数的情况.出现如下错误信息: ERROR 1418 : This function has none of DETERMINISTIC, NO SQL, or R ...

  6. vue-cli项目结构分析

    总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] bui ...

  7. [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)

    Description 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地.科 ...

  8. 表格头部header固定

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 轰炸III

    题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...

  10. C. Painting Fence 分治

    memory limit per test 512 megabytes input standard input output standard output Bizon the Champion i ...