首页 > 其他分享 >【洛谷】P2257 YY的GCD(莫比乌斯反演)

【洛谷】P2257 YY的GCD(莫比乌斯反演)

时间:2023-03-16 20:58:11浏览次数:57  
标签:lfloor right frac GCD P2257 sum rfloor 洛谷 left

原题链接

题意

\(T\) 组询问,每次询问求:

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

\(T=10^4,n,m \leq 10^7\)。

思路

不难想到枚举质数,将原式化简为:

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

按照套路,提出后面的 \(p\),得到:

\[\sum_{p \in prime}\sum_{i=1}^{\left \lfloor \frac{n}{p} \right \rfloor }\sum_{i=1}^{\left \lfloor \frac{m}{p} \right \rfloor } [\gcd(i,j)= 1] \]

套用莫比乌斯函数,得到:

\[\sum_{p \in prime}\sum_{i=1}^{\left \lfloor \frac{n}{p} \right \rfloor }\sum_{i=1}^{\left \lfloor \frac{m}{p} \right \rfloor } \sum_{d|\gcd(i,j)} \mu(d) \]

将莫比乌斯函数提到最前面去,得到:

\[\sum_{d=1} \mu(d) \sum_{p \in prime}\sum_{i=1}^{\left \lfloor \frac{n}{p} \right \rfloor }\sum_{i=1}^{\left \lfloor \frac{m}{p} \right \rfloor } [d|i][d|j] \]

后面的 \(d|i\) 其实就是在枚举 \(1 \sim \left \lfloor \frac{n}{p} \right \rfloor\) 中 \(d\) 的倍数有多少个,那么其实就是 \(\left \lfloor \frac{n}{pd} \right \rfloor\),带入原式,得到:

\[\sum_{d=1} \mu(d) \sum_{p \in prime} \left \lfloor \frac{n}{pd} \right \rfloor \left \lfloor \frac{m}{pd} \right \rfloor \]

到目前为止,利用数论分块,单次询问的复杂度为 \(O(质数的个数 \times \sqrt{n})\)。考虑进一步优化,设 \(k=pd\),带入原式:

\[\sum_{p \in prime} \sum_{d=1} \mu(d) \left \lfloor \frac{n}{k} \right \rfloor \left \lfloor \frac{m}{k} \right \rfloor \]

枚举一下 \(k\),提到式子的前方,得到:

\[\sum_{k=1} \left \lfloor \frac{n}{k} \right \rfloor \left \lfloor \frac{m}{k} \right \rfloor \sum_{p|k,p \in prime} \mu(\frac{k}{p}) \]

发现后面那个式子可以预处理掉,于是复杂度就为 \(O(T\sqrt{n})\)。

code:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e7+10;
#define LL long long
int f[N],mu[N],n,prime[N],tot;bool vis[N];LL sum[N];
void init()
{
	mu[1]=1;
	for(int i=2;i<N;i++)
	{
		if(!vis[i]) prime[++tot]=i,mu[i]=-1;
		for(int j=1;j<=tot&&prime[j]*i<N;j++)
		{
			vis[prime[j]*i]=true;
			if(i%prime[j]==0) {mu[prime[j]*i]=0;break;}
			mu[prime[j]*i]=-mu[i];
		} 
	}
	for(int i=1;i<=tot;i++) for(int j=prime[i];j<N;j+=prime[i]) sum[j]+=mu[j/prime[i]];
	for(int i=2;i<N;i++) sum[i]+=sum[i-1];
}
LL solve(int n,int m)
{
	LL res=0;
	for(int l=1,r=0;l<=min(n,m);l=r+1)
	{
		r=min(n/(n/l),m/(m/l));
		res+=1ll*(n/l)*(m/l)*(sum[r]-sum[l-1]);
	}
	return res;
}
int main()
{
	init();int n,m,T;scanf("%d",&T);while(T--) scanf("%d%d",&n,&m),printf("%lld\n",solve(n,m));
	return 0;
}

标签:lfloor,right,frac,GCD,P2257,sum,rfloor,洛谷,left
From: https://www.cnblogs.com/ListenSnow/p/17224082.html

相关文章

  • 【洛谷】P4139 上帝与集合的正确用法(扩展欧拉定理)
    原题链接题意求:\[2^{2^{2^{\ldots}}}\modp\]可以证明这个式子一定为一个常数。\(1\leqp\leq10^7\)思路根据扩展欧拉定理,可以得到:\[2^{2^{2^{\ldots}}}\equi......
  • 「题解」洛谷 P5644 [PKUWC2018]猎人杀
    题意:初始有\(n\)个人,每个人的权值是\(w_i\),假设这一轮剩余还没嘎掉的人总权值是\(s\),那么这一轮它有\(\frac{w_i}{s}\)的概率嘎掉。求\(1\)活到最后的概率是多少。......
  • 洛谷-P9147 题解
    正文最坏时间复杂度:\(\mathcal{O}(n)\)真不愧是签到题,差点没签上。。。我相信题意各位肯定很理解了,非常简单,但如何解决就是个问题。首先考虑朴素解法,建立一个求最长连......
  • 【洛谷】P2414 [NOI2011] 阿狸的打字机(AC自动机+离线询问)
    原题链接题意给定\(n\)个字符串,\(m\)次询问一个字符串\(x\)在另一个字符串\(y\)的出现次数。\(1\leqn,m\leq10^5\)。思路要解决多个字符串的问题,不难想到......
  • CF1665D GCD Guess
    个人思路:\(\gcd(x+a,x+b)=gcd(x+a,b-a)\)。考虑固定\(a\),然后试出来\(x+a\)所有因子。然后发现质数根本试不完。发现询问\(30\)次,\(2^{30}\)刚好比\(x\)大一......
  • P4387 洛谷做题笔记 2023313
    P4387洛谷做题笔记2023/3/13这道题的关键点在于,在入栈的同时可以完成出栈操作,这就需要在每一次压入时检测是否出栈。这道题还有一个易错点,就是在每一次询问之后,还必须......
  • 【洛谷】P4457 [BJOI2018]治疗之雨(期望+高斯消元)
    原题链接题意初始时玩家有\(p\)滴血,满血\(n\)滴,每个回合会进行如下操作:若当前还没有满血,则以\(\frac{1}{m+1}\)的概率增加一滴血;\(k\)次判定,每次以\(\frac......
  • 【洛谷】P4206 [NOI2005] 聪聪与可可(概率+记忆化搜索)
    原题链接题意给定一张\(n\)个节点\(m\)条边的无向图,初始时,A_zjzj在\(S\),fxt在\(T\),现在A_zjzj要前去抓住fxt。A_zjzj只会往使得两人的最短距离减\(1\)......
  • 洛谷 P1015 回文数
    P1015回文数https://www.luogu.com.cn/problem/P1015原题很明显的高精度,(1999年竟然就考主要有:高精度加法(含进位)、高精度判断回文数以及可以把字符串转成数字数组......
  • 洛谷-2822
    洛谷-2652key思路有个modk的想法很好,然后就是对于一遍一遍的询问进行前缀和优化,但有个问题就是算出来的s矩阵最开始是个下三角矩阵,但是根据前缀和公式来看,s[i][j]上方......