传送门

给\(n,m\),让你求

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^m [\gcd(i,j) \in prime]
\]

有\(T\)组询问\((T \le 10^4,n,m\le 10^7)\)。

枚举质数\(p\),然后柿子变成

\[\sum\limits_{p} \sum\limits_{i=1}^n\sum\limits_{j=1}^m [\gcd(i,j)=p]
\]

等价于

\[\sum\limits_{p} \sum\limits_{i=1}^{\left\lfloor n/p\right\rfloor}\sum\limits_{j=1}^{\left\lfloor m/p\right\rfloor} [\gcd(i,j)=1]
\]

因为把\(\left\lfloor n/p \right\rfloor,\left\lfloor m/p\right\rfloor\)以内互质的一对数乘上\(p\)就是\(\gcd=p\)的数了。

令\(S(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m [\gcd(i,j)=1]\),由于\(\mu\)的性质\([n=1]=\sum\limits_{d\mid n} \mu(d)\),所以

\[\begin{aligned}S(n,m)&=\sum\limits_{i=1}^n \sum\limits_{j=1}^m \sum\limits_{d\mid \gcd} \mu(d) \\&= \sum\limits_{d}\mu(d)\sum\limits_{i=1}^n [d\mid i]\sum\limits_{j=1}^m [d\mid j] \\&= \sum\limits_{d} \mu(d)\left\lfloor \frac{n}{d}\right\rfloor\left\lfloor \frac{m}{d}\right\rfloor\end{aligned}
\]

又因为\(\left\lfloor\frac{\left\lfloor\frac{n}{p}\right\rfloor}{d}\right\rfloor=\left\lfloor\frac{n}{dp}\right\rfloor\),所以柿子是

\[\sum\limits_{p} \sum\limits_{d} \mu(d) \left\lfloor\frac{n}{dp}\right\rfloor \left\lfloor\frac{m}{dp}\right\rfloor
\]

可以枚举\(k=dp\),有

\[\sum\limits_{k} \left\lfloor\frac{n}{k}\right\rfloor \left\lfloor\frac{m}{k}\right\rfloor\sum\limits_{p\mid k} \mu\left(\frac{k}{p}\right)
\]

令\(f(n)=\sum\limits_{p\mid n} \mu(\frac{n}{p})\),预处理出\(f\)的前缀和,数论分块就好了。

并不会算预处理的复杂度qwq...

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=(a);i<(b);++i)
#define per(i,a,b) for (int i=(a)-1;i>=(b);--i)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
typedef double db;
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<int> VI; const int maxn=1e7,N=maxn+10;
int vis[N],p[N],pn,mu[N],sum[N]; #define ss(l,r) (sum[r]-sum[l-1]) void init(int n) {
mu[1]=1;
rep(i,2,n+1) {
if(!vis[i]) {p[pn++]=i;mu[i]=-1;}
for(int j=0;j<pn&&i*p[j]<=n;j++) {
vis[i*p[j]]=1;
if(i%p[j]==0) {mu[i*p[j]]=0;break;}
else mu[i*p[j]]=-mu[i];
}
}
rep(i,0,pn) for(int j=p[i];j<=n;j+=p[i])
sum[j]+=mu[j/p[i]];
rep(i,1,n+1) sum[i]+=sum[i-1];
} ll solve(int n,int m) {
int tn=min(n,m); ll ans=0;
for(int l=1,r=0;l<=tn;l=r+1) {
r=min(n/(n/l),m/(m/l));
ans+=1ll*(n/l)*(m/l)*ss(l,r);
}
return ans;
} int main() {
#ifdef LOCAL
freopen("a.in","r",stdin);
#endif
init(maxn);
int _,n,m;for(scanf("%d",&_);_;_--) {
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
}
return 0;
}

[题解] LuoguP2257 YY的GCD的更多相关文章

  1. 题解 P2257 YY的GCD

    P2257 YY的GCD 解题思路 果然数论的题是真心不好搞. 第一个莫比乌斯反演的题,好好推一下式子吧..(借鉴了blog) 我们要求的答案就是\(Ans=\sum\limits_{i=1}^{n} ...

  2. LuoguP2257 YY的GCD

    题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不会了,于 ...

  3. [BZOJ2820]YY的GCD

    [BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  4. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  5. 【LG2257】YY的GCD

    [LG2257]YY的GCD 题面 洛谷 题解 题目大意: 给定\(n,m\)求\(\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)为质数]\). 我们设\(f(x)=[x为 ...

  6. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  7. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  8. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  9. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

随机推荐

  1. js里用 toLocaleString 实现给数字加三位一逗号间隔(有无小数点都适用)

    <input type="hidden" id="totalLandArea" value="<%-info.totalLandArea% ...

  2. c++中的Exceptions异常处理(翁恺c++公开课[36])

    Exceptions用于处理Run-time Error: //文件读取的异常捕获伪代码 try{ open the file; determine its size; allocate that m ...

  3. scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`

    scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`.Children 原因:包名写成了trait,与trait关键字重名了: package ...

  4. Nacos client 客户端cpu占用100% 问题排查和解决方案

    Nacos version:1.1.3client version:1.0.0 dependency: 'org.springframework.cloud:spring-cloud-alibaba- ...

  5. eclipse导入项目上面有个红叉X

    问题: 今天突然想到一个以前做过的项目,想导入到新环境中,发现不管咱整都一个红叉X, 我记得以前好像碰到过类似的问题,当时三秒搞定,谁知道时间一长,三分钟没有搞定. 还是记录下: 一般导入项目出错,肯 ...

  6. Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()

    一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...

  7. SpringBoot 集成MyBatis、事务管理

    集成MyBatis (1)在pom.xml中添加依赖 <!-- mybatis的起步依赖.包含了mybatis.mybatis-spring.spring-jdbc(事务要用到)的坐标 --&g ...

  8. 中山普及Day17——普及

    今天换教室,本来教室多好嘛,易守难攻,结果...今天今天仅下午就被熊抄了2次,熊超真TMD不是人呐,走路连脚步声都没有. 然后,播报分数: 爆0了!!!

  9. Immediate Decodability[UVA644](Trie入门)

    传送门 题意:给出一些数字串,判断是否有一个数字串是另一个串的前缀. 这题真的可以算是Trie树的一道模板题了. 先把Trie树建好,建树的时候记录一个sum表示一个节点有多少个串会包含此节点,然后再 ...

  10. 与Python的第一次见面

    1.Python的起源 Python的作者,Guido von Rossum,确实是荷兰人.1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕 ...