【Luogu】P3455Zip-Queries(莫比乌斯反演)
真是神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(莫比乌斯反演)的更多相关文章
- BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)
手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/article/details/79506484 题目链接: (Lu ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...
- [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)
题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...
- [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...
- BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- [Luogu P3455] [POI2007]ZAP-Queries (莫比乌斯反演 )
题面 传送门:洛咕 Solution 这题比这题不懂简单到哪里去了 好吧,我们来颓柿子. 为了防止重名,以下所有柿子中的\(x\)既是题目中的\(d\) 为了方便讨论,以下柿子均假设\(b>=a ...
- 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 ...
- 【Luogu】P2303Longge的问题(莫比乌斯反演)
就让我这样的蒟蒻发一个简单易想的题解吧!!! 这题我一开始一看,woc这不是莫比乌斯反演么,推推推,推到杜教筛,输出结果一看不对 emmm回来仔细想想……woc推错了? 然后撕烤半天打了个暴力,A了 ...
- 【Luogu】P3327约数个数和(莫比乌斯反演+神奇数论公式)
题目链接 真TM是神奇数论公式. 注明:如无特殊说明我们的除法都是整数除法,向下取整的那种. 首先有个定理叫$d(ij)=\sum\limits_{i|n}{}\sum\limits_{j|m}{}( ...
随机推荐
- TitleBar(标题栏)的使用
github地址:https://github.com/buhuiming/BHMAndroid 使用compile 'com.bhm.sdk.bhmlibrary:BHMLibrary:1.1.2' ...
- C++拾遗(二)——初窥标准库类型
本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直 ...
- selenium-Python之进行文件的上传和下载文件
在利用Selenium进行批量上传文件时,遇到如下的Windows窗口进行上传.下载操作时,可以通过pywinauto进行操作.上传窗口如下 使用pywinauto,需知Windows窗口控件的cla ...
- SQLServer外键查询删除信息
SELECT FK.NAME,FK.OBJECT_ID,OBJECT_NAME(FK.PARENT_OBJECT_ID) AS REFERENCETABLENAMEFROM SYS.FOREIGN_K ...
- asp.net core mvc 异步表单(Ajax.BeginForm)
.net core中已经没有beginform扩展函数了. 通过Bower引入jquery-ajax-unobtrusive: <script src="~/lib/jquery-aj ...
- ndarray数组自动创建
为了实现某些运算,需要快速构造符合要求的大数组 Numpy函数生成的数组,如不指定类类型,几乎全为浮点型(arange除外,它是整形),因为科学计算中测量值,例如温度.长度,都是浮点数 import ...
- C++基础:虚函数、重载、覆盖、隐藏<转>
转自:http://www.2cto.com/kf/201404/291772.html 虚函数总是跟多态联系在一起,引入虚函数可以使用基类指针对继承类对象进行操作! 虚函数:继承接口(函数名,参数, ...
- python matplotlib.pyplot对图像进行绘制
imshow()是对图像进行绘制 imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colo ...
- python暴力破解wifi密码程序
import time # 破解wifi库 import pywifi from pywifi import const class PoJie(object): def __init__(self, ...
- a标签目标链接问题
1.先确定开始文件和目标文件,例如从css.html开始到body.html 2.确定文件寻找路径,因为css.html的父目录是css,而body.html在body目录下,所以需要先退到上一目录h ...