<更新提示>

<第一次更新>


<正文>

Zap

Description

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

Input Format

第一行包含一个正整数n,表示一共有n组询问。(1<=n<= 50000)接下来n行,每行表示一个询问,每行三个 正整数,分别为a,b,d。(1<=d<=a,b<=50000)

Output Format

对于每组询问,输出到输出文件zap.out一个正整数,表示满足条件的整数对数。

Sample Input

2
4 5 2
6 4 3

Sample Output

3
2

解析

按照题意,可以直接设一个数论函数$$f(d)=\sum_{x=1}a\sum_{y=1}b[gcd(x,y)=d]$$

代表\([1,a],[1,b]\)范围内最大公因数为\(d\)的二元组个数。

可是这个函数好像比较难求,考虑\(Möbius\)反演。我们发现有函数

\[F(n)=\sum_{n|d}f(d)
\]

比较好求。即\(F(n)\)代表\([1,a],[1,b]\)范围内最大公约数为\(n\)倍数的二元组个数,只需满足二元组\((x,y)\)都是\(n\)倍数即可,所以有

\[F(n)=\lfloor \frac{a}{n} \rfloor\lfloor \frac{b}{n} \rfloor
\]

然后套\(Möbius\)定理,得到

\[f(d)=\sum_{d|n}\mu(\frac{n}{d})F(n)
\]

对于求解\(f(d)\),有

\[f(d)=\sum_{d|n}\mu(\frac{n}{d})F(n)=\sum_{d|n}\mu(\frac{n}{d})\lfloor \frac{a}{n} \rfloor\lfloor \frac{b}{n} \rfloor
\]

设\(t=\frac{n}{d}\),由于\(\lfloor \frac{a}{n} \rfloor\lfloor \frac{b}{n} \rfloor\)在\(n\leq\min(a,b)\)时有值,所以\(1\leq t\leq\frac{\min(a,b)}{d}\),则

\[f(d)=\sum_{t=1}^{\frac{\min(a,b)}{d}}\mu(t)\lfloor \frac{a}{td} \rfloor\lfloor \frac{b}{td} \rfloor
\]

然后就可以求\(f(d)\)的值了,由于系数\(\lfloor \frac{a}{td} \rfloor\lfloor \frac{b}{td} \rfloor\)是下取整形式的,就可以整除分块一下,对每一块相同的部分一起计算一下即可。

\(Code:\)

#include <bits/stdc++.h>
using namespace std;
const int N=60020,Uplim=5e4;
int a,b,k,vis[N],Prime[N],mui[N],cnt,sum[N],ans;
inline void input(void)
{
scanf("%d%d%d",&a,&b,&k);
}
inline void sieve(void)
{
mui[1] = 1;
for (int i=2;i<=Uplim;i++)
{
if (!vis[i])Prime[++cnt] = i , mui[i] = -1;
for (int j=1;j<=cnt&&i*Prime[j]<=Uplim;j++)
{
vis[ i*Prime[j] ] = true;
if (i%Prime[j]==0)break;
mui[ i*Prime[j] ] = -mui[i];
}
}
}
inline void init(void)
{
for (int i=1;i<=Uplim;i++)
sum[i] = sum[i-1] + mui[i];
}
inline void solve(void)
{
ans = 0 , a /= k , b /= k;
for (int l=1,r;l<=min(a,b);l=r+1)
{
r = min( a/(a/l) , b/(b/l) );
ans += (a/l) * (b/l) * (sum[r]-sum[l-1]);
}
}
int main(void)
{
sieve();
init();
int T;
scanf("%d",&T);
while (T--)
{
input();
solve();
printf("%d\n",ans);
}
return 0;
}

<后记>

『Zap Möbius反演』的更多相关文章

  1. 『Möbius函数与Möbius反演』

    Möbius函数 定义 设正整数\(n\)算数基本定理分解后为\(n=\prod_{i=1}^{k}p_i^{a_i}\),定义函数 \[ \mu(n)= \begin{cases} 0\ \ (\e ...

  2. js实现『加载更多』功能实例

    DEMO : 滚动加载示例 关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多.下拉刷新功能. 但实际用起来却是很麻烦.由于是第三方插件,要按照对方 ...

  3. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  4. 2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析

    2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析 实验要求: 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后 ...

  5. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  6. 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件

    代码: using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoWebControl ...

  7. 『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势

    在写<Asp.Net 服务器组件系列文档>之前,笔者不才,揣测微软战略用意: 微软利益诉求莫过于 微软产品和技术的市场份额: 因此,微软战略之一莫过于将 所有开发人员 团聚在 微软周围,以 ...

  8. 2017-2018-2 20155303『网络对抗技术』Exp6:信息收集与漏洞扫描

    2017-2018-2 20155303『网络对抗技术』 Exp6:信息收集与漏洞扫描 --------CONTENTS-------- 一.原理与实践说明 1.实践内容 2.基础问题 二.实践过程记 ...

  9. 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践

    2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主 ...

随机推荐

  1. QUIC协议的分析,性能测试以及在QQ会员实践

    WeTest 导读 你听过HTTPS.HTTP2.0.SPDY,但是这些应用层协议都是基于可靠的传输层协议TCP来实现的.那么,基于高效的UDP协议有没有一种相对可靠的应用层协议呢? Why QUIC ...

  2. C# 中Datatime类用法总结

    C# 中Datatime类用法总结 收集了一些记录下来,这些有的是从网上找的,有些是自己使用到的: DateTime dt = DateTime.Now; dt.ToString();//2005-1 ...

  3. C Primer Plus 第8章 字符输入/输出和验证输入 编程练习

    1. #include <stdio.h> int main(){ char ch; int ct = 0; while ((ch=getchar()) != EOF) ct++; pri ...

  4. 管理和安装 chart - 每天5分钟玩转 Docker 容器技术(168)

    安装 chart 当我们觉得准备就绪,就可以安装 chart,Helm 支持四种安装方法: 安装仓库中的 chart,例如:helm install stable/nginx 通过 tar 包安装,例 ...

  5. ubuntukylin18.04Lts和deepin15.5与win10 1803双系统安装

    我首先安装的是ubuntu kylin(中文名优麒麟) 1.计算机右键选择管理磁盘,压缩卷设置空闲空间(第7步分区用) 2.重启时fn+f1进入bios设置界面. 3.关闭安全模式和快速启动,将boo ...

  6. sql server 高可用故障转移(上)

    群集准备工作 个人电脑 内存12G,处理器 AMD A6-3650CPU主频2.6GHz 虚拟机 VMware Workstation 12 数据库  sql server 2008 r2 三台虚拟服 ...

  7. Fedora Linux中解决“xxx不在sudoers文件中”

    问题描述: 在Fedora中执行一些操作时需要使用root权限,当我使用命令: sudo 想在普通用户中临时获得root权限时,却被提示: "xxx 不在 sudoers 文件中.此事将被报 ...

  8. HTML学习之制作导航网页

    前言 今天用HTML写了一个网址导航,源代码如下: <html> <head> <title>网址导航</title> </head> &l ...

  9. 玩转web之ligerui(二)---前缀编码生成树(分级码)实现树型表格

    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. 背景:             在ligerui中(其他uI可能也大同小异),实现树形表格可以通过父子节点,也可以通过前缀编码生成树去实现,而使 ...

  10. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...