洛谷 P2257 YY的GCD
洛谷 P2257 YY的GCD

$ solution: $
这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路。
我们可以列出答案就是要我们求:
$ ans=\sum_{p\in prime}\sum_{i=1}{n}{\sum_{j=1}{m}{[gcd(i,j)==p]}} $
我们发现后面那一部分( $ \sum_{i=1}{n}{\sum_{j=1}{m}{[gcd(i,j)==p]}} $ )可以套路的莫比乌斯反演:
$ ans=\sum_{p\in prime}\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}{\frac{m}{p}}{[gcd(i,j)==1]}} $
$ ans=\sum_{p\in prime}\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}{\frac{m}{p}}{\sum_{k|gcd(i,j)}{\mu(k)}}} $
$ ans=\sum_{p\in prime}\sum_{k}{min(n,m)}{\mu(k)}{\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}^{\frac{m}{p}}{[k|gcd(i,j)]}}} $
$ ans=\sum_{p\in prime}\sum_{k}^{min(n,m)}{\mu(k)\times \lfloor \frac{n}{p\times k} \rfloor \times \lfloor \frac{m}{p\times k} \rfloor} $
我们发现后面那两个东西有点麻烦,我们想办法让它变成常数项:
设: $ T=p\times k $
$ ans=\sum_{t=1}^{min(n,m)} \lfloor \frac{n}{T} \rfloor \times \lfloor \frac{m}{T} \rfloor \sum_{p|T,p\in prime} \mu{\frac{T}{p}} $
然后我们发现后面那一部分( $ \sum_{p|T,p\in prime} \mu{\frac{T}{p}} $ )可以预处理,然后我们在前面用整除分块,这样就可以每次只用 $ log(min(n,m)) $ 的时间完成单个询问了!
$ code: $
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int
using namespace std;
const int N=1e7;
ll ans;
int n,m,t;
int pr[10000005];
int mu[10000005];
int sum[10000005];
bool zhi[10000005];
inline int qr(){
register char ch; register bool sign=0; rg res=0;
while(!isdigit(ch=getchar())) if(ch=='-')sign=1;
while(isdigit(ch)) res=res*10+(ch^48),ch=getchar();
return sign?-res:res;
}
inline void get_ready(){
mu[1]=1; int t=0;
for(rg i=2;i<=N;++i){
if(!zhi[i])pr[++t]=i,mu[i]=-1;
for(rg j=1;j<=t;++j){
if(i*pr[j]>N)break;
zhi[i*pr[j]]=1;
if(!(i%pr[j]))break;
mu[i*pr[j]]=-mu[i];
}
}
for(rg i=1;i<=t;++i)
for(rg j=1;j*pr[i]<=N;++j)
sum[j*pr[i]]+=mu[j];
for(rg i=1;i<=N;++i) sum[i]+=sum[i-1];
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
t=qr(); get_ready();
while(t--){ ans=0;
n=qr(); m=qr();
rg x=min(n,m),l,r;
for(l=1;l<=x;l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=(ll)(n/l)*(m/l)*(sum[r]-sum[l-1]);
}printf("%lld\n",ans);
}
return 0;
}
洛谷 P2257 YY的GCD的更多相关文章
- 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块
https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...
- 洛谷 P2257 YY的GCD 题解
原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 洛谷P2257 YY的GCD
今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...
- 洛谷P2257 YY的GCD(莫比乌斯反演)
传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...
- 解题:洛谷2257 YY的GCD
题面 初见莫比乌斯反演 有一个套路是关于GCD的反演经常设$f(d)=\sum_{gcd(i,j)==d},g(d)=\sum_{d|gcd(i,j)}$,然后推推推 $\sum\limits_{i= ...
- [洛谷2257]YY的GCD 题解
整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...
- 洛谷 2257 - YY的GCD
莫比乌斯反演半模板题 很容易可以得到 \[Ans = \sum\limits_{p \in prime} \sum\limits_{d = 1}^{\min (\left\lfloor\frac{a} ...
随机推荐
- 如何停止处于stopping状态的windows服务
工作中有时需要启动和停止windows service,有时候会出现服务处于stopping或者starting的状态,但是,在services界面中,start service/stop servi ...
- Django-website 程序案例系列-17 forms表单验证的字段解释
1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...
- BZOJ3110[Zjoi2013]K大数查询——权值线段树套线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
- lambda 分类抽取N条
从每个分类中,按照比例抽取 lista中percent是比例,按照这个比例抽取. static List<A> lista = new List<A>() { new A(){ ...
- HDU4623 CRIME 【状压DP】【同类项合并】
题目大意: 求相邻元素互质的排列个数. 题目分析: 由于互质只与质因数有关,所以我们对于质因数种类相同的数合并为一类,特殊的,1,17,19,23是一类,因为没有数与他们不互质. 那么我们做各个位进制 ...
- First Knight UVALive - 4297(优化高斯消元解概率dp)
题意: 一个矩形区域被分成 m*n 个单元编号为 (1, 1)至 (m, n),左上为 (1, 1),右下为(m, n).给出P(k)i,j,其中 1 ≤ i ≤ m,1 ≤ j ≤ n,1 ≤ k ...
- POJ - 1062(昂贵的聘礼)(有限制的spfa最短路)
题意:...中文题... 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 54350 Accepted: 16 ...
- MT【230】一道代数不等式
设$a,b,c>0,$满足$a+b+c\le abc$证明:$\dfrac{1}{\sqrt{1+a^2}}+\dfrac{1}{\sqrt{1+b^2}}+\dfrac{1}{\sqrt{1+ ...
- [CF791D]Bear and Tree Jumps
题目描述 A tree is an undirected connected graph without cycles. The distance between two vertices is th ...
- 【bzoj3876】 Ahoi2014—支线剧情
http://www.lydsy.com/JudgeOnline/problem.php?id=3876 (题目链接) 题意 给出一张拓扑图,每条边有一个权值,问每次从1号点出发,走遍所有的边所需要的 ...