[BZOJ 3309]DZY Loves Math 莫比乌斯反演

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ 3309]DZY Loves Math 莫比乌斯反演相关的知识,希望对你有一定的参考价值。

还是需要看题解T-T

枚举d=gcd(i,j),得到

技术分享图片

好了现在就要处理后边这个函数了,可以无脑求,不过107显然会T,当然要O(n)了

然后我们就观察这个函数。。大力分析一下µ可能会带来的贡献

令T=p1a1*p2a2*...*pkak

    d=p1b1*p2b2*...*pkbk

若μ(T/d)!=0,那么T/d后各项次数0<=(ai-bi)<=1

分一下类:

①若ai!=aj

我们知道对于f(d)有贡献的是最大次项,设为ax

假如固定d包含约数pax,那么f(d)=ax,T的所有约数d的其他次幂就要选择了。

根据组合数的性质,选择奇数和偶数的方案是一样的,而它对答案f(d)的系数的贡献分别为±1,这样一综合为0

②若所有的a都相等

我们假设对于任意选取方案,f值都不变

那么由于选取奇数个元素和偶数个元素的方案数相等,和仍然为0

但是有一种选取方案,那就是全部选,它的f值就变为了a-1,因为它的最高次幂不是a了

但是它对应的方案选取的f值还是a,所以一综合,我们就要处理掉这个差出来的1

考虑到μ的符号之后,最终结果为(-1)(k+1)

最终结果:故所有a都相等,则g(T)=(-1)(k+1)

然后根据lc大神教的O(n)思路去处理就好啦!记得开long long

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define N 10100000
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
#define LL long long
int t,n,m;
int notprime[N],prime[N];
LL g[N],K[N],G[N];
void get_pre(){
	notprime[1]=1;
	pos(i,2,N-10){
		if(!notprime[i]){
			prime[++prime[0]]=i;
			g[i]=1;K[i]=1;G[i]=i;
		}
		for(int j=1;j<=prime[0]&&prime[j]*i<=N-10;j++){
			notprime[i*prime[j]]=1;
			if(i%prime[j]==0){
				K[i*prime[j]]=K[i]+1;
				G[i*prime[j]]=G[i]*prime[j];
				int i1=i*prime[j]/G[i*prime[j]];
				if(i1==1) g[i*prime[j]]=1;
				else{
					if(K[i1]==K[i*prime[j]]) g[i*prime[j]]=-g[i1];
					else g[i*prime[j]]=0;
				}
				break;
			}
			G[i*prime[j]]=prime[j];
			K[i*prime[j]]=1;
			if(K[i]==1) g[i*prime[j]]=-g[i];
			else g[i*prime[j]]=0;
		}
	}
	pos(i,1,N-10) g[i]+=g[i-1];
}
LL get_ans(){
	if(n>m) swap(n,m);
	LL res(0);
	int last(0);
	for(int i=1;i<=n;i=last+1){
		last=min(n/(n/i),m/(m/i));
		res+=(n/i)*1ll*(m/i)*1ll*(g[last]-g[i-1]);
	}
	return res;
}
int main(){
	scanf("%d",&t);
	get_pre();
	while(t--){
		scanf("%d%d",&n,&m);
		printf("%lld\\n",get_ans());
	}
	return 0;
}

  

以上是关于[BZOJ 3309]DZY Loves Math 莫比乌斯反演的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ3309]DZY Loves Math

Bzoj3309 DZY Loves Math

BZOJ3309DZY Loves Math

bzoj3309: DZY Loves Math

BZOJ3309: DZY Loves Math 莫比乌斯反演优化

BZOJ3309DZY Loves Math(莫比乌斯反演)