bzoj2693 jzptab (莫比乌斯反演)

本文深入解析了一道数学算法题,求解∑i=1n∑j=1mlcm(i,j),通过逐步推导公式,运用莫比乌斯反演和线性筛选积性函数的方法,最终实现O(Tn+n)的时间复杂度解决方案。

传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2693
题目大意:
∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^m lcm(i,j) i=1nj=1mlcm(i,j)


s o l u t i o n solution solution
这种题无脑推式子就行了
假定 n ≥ m n\ge m nm
∑ i = 1 n ∑ j = 1 m l c m ( i , j ) = ∑ i = 1 n ∑ j = 1 m i j g c d ( i , j ) = ∑ d = 1 m 1 d ∑ d ∣ i ∑ d ∣ j i j ∗ [ g c d ( i , j ) = = d ] = ∑ d = 1 m d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ i j ∗ [ g c d ( i , j ) = = 1 ] = ∑ d = 1 m d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ i j ∑ t ∣ g c d ( i , j ) μ ( t ) = ∑ d = 1 m d ∑ t = 1 ⌊ m d ⌋ μ ( t ) t 2 ∑ i = 1 ⌊ n t d ⌋ ∑ j = 1 ⌊ m t d ⌋ i j = ∑ T = 1 m ∑ i = 1 ⌊ n T ⌋ i ∑ j = 1 ⌊ m T ⌋ j ∑ t ∣ T μ ( t ) ∗ t 2 ∗ T t = ∑ T = 1 m ( ( 1 + ⌊ n T ⌋ ) ⌊ n T ⌋ 2 ) ∗ ( ( 1 + ⌊ m T ⌋ ) ⌊ m T ⌋ 2 ) ∑ t ∣ T T μ ( t ) t = ∑ T = 1 m f ( ⌊ n T ⌋ , ⌊ m T ⌋ ) ∗ g ( T ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\\ =\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\\ =\sum_{d=1}^m\frac{1}{d}\sum_{d|i}\sum_{d|j}ij*[gcd(i,j)==d]\\ =\sum_{d=1}^md\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{d}\rfloor}ij*[gcd(i,j)==1]\\ =\sum_{d=1}^md\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{d}\rfloor}ij\sum_{t|gcd(i,j)}\mu(t)\\ =\sum_{d=1}^md\sum_{t=1}^{\lfloor \frac{m}{d} \rfloor} \mu (t)t^2\sum_{i=1}^{\lfloor \frac{n}{td}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{td}\rfloor} ij\\ =\sum_{T=1}^{m}\sum_{i=1}^{\lfloor\frac{n}{T}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{T}\rfloor}j\sum_{t|T}\mu(t)*t^2*\frac{T}{t}\\ =\sum_{T=1}^m\left(\frac{(1+\lfloor\frac{n}{T}\rfloor)\lfloor\frac{n}{T}\rfloor}{2}\right)* \left(\frac{(1+\lfloor\frac{m}{T}\rfloor)\lfloor\frac{m}{T}\rfloor}{2}\right)\sum_{t|T}T\mu(t)t\\ =\sum_{T=1}^mf(\lfloor\frac{n}{T}\rfloor,\lfloor\frac{m}{T}\rfloor)*g(T) i=1nj=1mlcm(i,j)=i=1nj=1mgcd(i,j)ij=d=1md1didjij[gcd(i,j)==d]=d=1mdi=1dnj=1dmij[gcd(i,j)==1]=d=1mdi=1dnj=1dmijtgcd(i,j)μ(t)=d=1mdt=1dmμ(t)t2i=1tdnj=1tdmij=T=1mi=1Tnij=1TmjtTμ(t)t2tT=T=1m(2(1+Tn)Tn)(2(1+Tm)Tm)tTTμ(t)t=T=1mf(Tn,Tm)g(T)
g ( x ) g(x) g(x)显然是个积性函数,直接线性筛
其他就是莫比乌斯反演的套路了
O ( T n + n ) O(T\sqrt{n}+n) O(Tn +n)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define repp(i,j,k) for(int i = j;i >= k;--i)
#define rept(i,x) for(int i = linkk[x];i;i = e[i].n)
#define P pair<int,int>
#define Pil pair<int,ll>
#define Pli pair<ll,int>
#define Pll pair<ll,ll>
#define pb push_back 
#define pc putchar
#define mp make_pair 
#define file(k) memset(k,0,sizeof(k))
#define ll long long
#define N 10000000
int rd()
{
	int num = 0;char c = getchar();bool flag = true;
	while(c < '0'||c > '9') {if(c == '-') flag = false;c = getchar();}
	while(c >= '0' && c <= '9') num = num*10+c-48,c = getchar();
	if(flag) return num;else return -num;
}
const int p = 1e8+9;
int n,m,inv;
int f[N+10000],prime[N+10000],miu[N+10000];
inline int mo(int a){return a>=p?a-p:a;}
inline int calc(int a,int b){return (a+=b)>=p?a-=p:a;}
inline int mul(int a,int b){return 1ll*a*b%p;}
inline int del(int a,int b){return (a-=b)<0?a+=p:a;}
void pre()
{
	miu[1] = 1;f[1] = miu[1]*1;
	rep(i,2,N)
	{
		if(!f[i]) miu[i] = p-1,f[i] = calc(f[1],mul(miu[i],i)),prime[++prime[0]] = i;
		rep(j,1,prime[0])
		{
			if(i*prime[j]>N) break;
			miu[i*prime[j]] = i%prime[j]?mo(p-miu[i]):0;
			f[i*prime[j]] = i%prime[j]?mul(f[i],f[prime[j]]):f[i];
			if(i%prime[j] == 0) break;
		}
	}
	rep(i,1,N) f[i] = mul(f[i],i);
	rep(i,1,N) f[i] = calc(f[i],f[i-1]);
}
void work()
{
	n = rd();m = rd();
	if(n < m) swap(n,m);
	int i = 1;
	int ans = 0;
	while(i<=m)
	{
		int j = min(n/(n/i),m/(m/i)),tmpn = n/i,tmpm = m/i;
		int v = mul(inv,mul(1+tmpn,tmpn));v = mul(v,mul(inv,mul(1+tmpm,tmpm)));
		ans = calc(ans,mul(v,del(f[j],f[i-1])));
		i = j+1;
	}
	printf("%d\n",ans);
}
int main()
{
	inv = (p+1)/2;
	pre();
	int T = rd();
	while(T--) work();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值