题目链接

  真是神TM莫比乌斯

  首先来看一个神奇的结论:求gcd(x,y)==k的对数,其中1<=x<=n,1<=y<=m

  等同于求gcd(x,y)==1的对数,其中1<=x<=n/k,1<=y<=m/k

  然后这题就变成了求gcd(x,y)==1的对数,其中1<=x<=n/k,1<=y<=m/k

  我们再把莫比乌斯反演的定义copy一下

  设有函数$F(n),f(n)$定义在非负整数集合上

  有$F(n)=\sum\limits_{d|n}^{}f(d)$

  那么则有$f(n)=\sum\limits_{d|n}^{}miu(d)F(\frac{n}{d})$

  或者说如果有$F(n)=\sum\limits_{n|d}^{}f(d)$

  那么$f(n)=\sum\limits_{n|d}^{}miu(\frac{d}{n})F(d)$

  miu函数定义如下:

  若d=1,miu(d)=1;

  若d=$P_{1}P_{2}.......P_{n}$,则miu(d)=$(-1)^{k}$;

  其他情况下miu(d)=0.

  我们这道题使用第二种形态。

  我们设F(n)为gcd(x,y)==n的公倍数的x,y对数,f(n)为gcd(x,y)==n的x,y对数。

  则有$F(n)=\sum\limits_{n|d}^{}f(d)$

  根据莫比乌斯反演得到$f(n)=\sum\limits_{n|d}^{}miu(\frac{d}{n})F(d)$

  $F(d)=\frac{n}{d}\frac{m}{d}$显然

  且本题中我们要求的是f(1)

  那么原式化为$f(1)=\sum\limits_{i=1}^{min(n,m)}miu(i)\frac{n}{i}\frac{m}{i}$

  那么本题我们做完了吗?答案明显是否定的。

  因为你直接for一遍i会超时。

  观察到for i in 1~n 有一段区间使得n/i的取值是相同的

  而且这个取值最多只有$\sqrt[]{n}$种

  所以应用数论的分块优化

  贴上代码

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cmath> using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long miu[];
long long prime[],tot;
bool f[]; long long count(long long n,long long m){
long long top=min(n,m);long long ans=;
long long x=;
while(x<=top){
long long y=min(n/(n/x),m/(m/x));
ans+=(long long)(miu[y]-miu[x-])*(n/x)*(m/x);
x=y+;
}
return ans;
} int main(){
miu[]=;
for(long long i=;i<=;++i){
if(!f[i]){
prime[++tot]=i;
miu[i]=-;
}
for(long long j=;j<=tot&&prime[j]*i<=;++j){
f[i*prime[j]]=;
if(i%prime[j]) miu[i*prime[j]]=-miu[i];
else break;
}
}
for(long long i=;i<=;++i) miu[i]+=miu[i-];
long long T=read();
while(T--){
long long n=read(),m=read(),e=read();
n/=e;m/=e;
if(n>m) swap(n,m);
printf("%lld\n",count(n,m));
}
return ;
}

【Luogu】P3455Zip-Queries(莫比乌斯反演)的更多相关文章

  1. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/article/details/79506484 题目链接: (Lu ...

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

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

  3. [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)

    题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...

  4. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

  5. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  6. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  7. [Luogu P3455] [POI2007]ZAP-Queries (莫比乌斯反演 )

    题面 传送门:洛咕 Solution 这题比这题不懂简单到哪里去了 好吧,我们来颓柿子. 为了防止重名,以下所有柿子中的\(x\)既是题目中的\(d\) 为了方便讨论,以下柿子均假设\(b>=a ...

  8. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  9. 【Luogu】P2303Longge的问题(莫比乌斯反演)

    就让我这样的蒟蒻发一个简单易想的题解吧!!! 这题我一开始一看,woc这不是莫比乌斯反演么,推推推,推到杜教筛,输出结果一看不对 emmm回来仔细想想……woc推错了? 然后撕烤半天打了个暴力,A了 ...

  10. 【Luogu】P3327约数个数和(莫比乌斯反演+神奇数论公式)

    题目链接 真TM是神奇数论公式. 注明:如无特殊说明我们的除法都是整数除法,向下取整的那种. 首先有个定理叫$d(ij)=\sum\limits_{i|n}{}\sum\limits_{j|m}{}( ...

随机推荐

  1. org.apache.axis2.AxisFault: Service class XXXXX must have public as access Modifier解决方案

    使用Axis2工具生成客户端调用辅助类后,编写客户端调用代码运行时报错,完整错误信息如下: log4j:WARN No appenders could be found for logger (org ...

  2. 中移动TD-LTE 4G设备招标

    移动这是要干吗呢?2%的份额,公司如果没有其他业务,可以消失了 ------------------------------------------------------ 中国移动已经初步确定了各供 ...

  3. {ubuntu}乱七八糟重命名为1 2 3.....png

    i=; for f in *.png; do mv "$f" ${i}.png; ((i++)); done 网上找了个测试的数据集,发现读取时候,要重命名一下 一片帖子问了类似的 ...

  4. [原创] SOAP UI 创建SOAP工程进行接口测试

    下载及安装 1. 登录http://www.soapui.org/ 2. 鼠标移动到导航头的Downloads选项 3. 点击SOAP UI 4. 下载页面 新建项目 创建项目 1. 创建项目很简单. ...

  5. Linux的安装与配置

    PS:本文适合刚刚了解Linux系统,并想要学习Linux系统的一些基本操作的同学.只要按如下方法安装配置好,就可以在自己的电脑上使用Linux系统了. 一.安装前的准备 1.下载并安装VMware ...

  6. static心得

    TextClass text; 吉晨   static注意 只要显式调用一个类的某一个static变量,那么就会连带static块,所有static变量一起调用,哪怕不去new一个对象,这时候已经对这 ...

  7. POJ 2831 Can We Build This One?

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1728   Accepted: 643 Case Time Limit: 2 ...

  8. MYSQL 中随机读取一条数据

    SELECT * FROM res AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM res) - (SELECT MIN(id) FRO ...

  9. SQLite-表达式

    SQLite -表达式 一个表达式是一个或多个值的组合,运算符和SQL函数,评价一个值. SQL表达式就像公式和都写在查询语言.您还可以使用为特定的数据集查询数据库. 语法: 考虑到SELECT语句的 ...

  10. java并发编程:Executor、Executors、ExecutorService

    1.Executor和ExecutorService Executor:一个接口,其定义了一个接收Runnable对象的方法executor,其方法签名为executor(Runnable comma ...