本人才学莫比乌斯反演,样例未过求调
查看原帖
本人才学莫比乌斯反演,样例未过求调
553501
可爱的小棉羊楼主2023/11/4 17:29
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int mu[N];
int book[N],cnt,prime[N];
long long sum[N],p[N];
int main(){
	int t;
	cin>>t;
	mu[1]=book[1]=1;
	for(int i=2;i<=1e7;i++){
		if(!book[i])prime[++cnt]=i,mu[i]=-1;
		for(int j=1;prime[j]*i<=1e7&&prime[j]<=cnt;j++){
			book[prime[j]*i]=1;
			if(i%prime[j]==0){
				mu[i*prime[j]]=0;
				break;
			}
			mu[i*prime[j]]=-mu[i];
		}
	}
	for(int i=1;i<=cnt;i++)for(int j=1;prime[i]*j<=1e7;j++)p[prime[i]*j]+=mu[j];
	for(int i=1;i<=1e7;i++)sum[i]=sum[i-1]+p[i];
	//for(int i=1;i<=10;i++)cout<<p[i]<<endl;
	while(t--){
		int n,m;
		long long ans=0;
		cin>>n>>m;
		if(n>m)swap(n,m);
		int l=1;
		while(l<=n){
			int r;
			if(n/l==0)r=n+1;
			else r=min(n/(n/l),m/(m/l));
			ans+=(long long)(n/l)*(m/l)*(sum[r]-sum[l-1]);
			l=r+1;
		}
		cout<<ans<<endl;
	}
	return 0;
}

2023/11/4 17:29
加载中...