TLE + WA 求助
查看原帖
TLE + WA 求助
590600
Kreado楼主2023/3/26 10:52

式子没问题吧

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll Maxn=5e4+7;
int mu[Maxn],sum[Maxn],prime[Maxn],cnt,p[Maxn];
bool isprime[Maxn];
inline void EulerSieve(ll N){
	isprime[1]=isprime[0]=1;
	mu[1]=1;
	for(ll i=2;i<=N;i++){
		if(!isprime[i]) prime[++cnt]=i,mu[i]=-1;
		for(ll j=1;j<=cnt&&prime[j]*i<=N;j++){
			isprime[prime[j]*i]=1;
			if(!(i%prime[j])) break;
			mu[prime[j]*i]=-mu[i];
		}
	}
	for(ll i=1;i<=N;++i) sum[i]=sum[i-1]+mu[i];
	for(ll i=1;i<=N;i++)
		for(ll l=1,r;l<=i;l=r+1){
			r=i/(i/l);
			p[i]+=(r-l+1)*(i/l);
		}
}
ll T,n,m,ans;
int main(){
	EulerSieve(Maxn-7);
	scanf("%lld",&T);
	while(T--){
		scanf("%lld%lld",&n,&m);
		if(n>m) swap(n,m);ans=0;
		for(ll l=1,r;l<=n;l++){
			r=min(n/(n/l),m/(m/l));
			ans+=(sum[r]-sum[l-1])*p[n/l]*p[m/l];
		}
		printf("%lld\n",ans);
	}
	return 0;
}

2023/3/26 10:52
加载中...