MnZn求助,这为什么会RE
查看原帖
MnZn求助,这为什么会RE
116640
Eaoci楼主2022/4/13 10:22
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
const int N=10000010,mod=20101009;
int n,m;
int p[N],pri[N],cnt,mo[N],f[N],ans;
int oula(int n){
	mo[1]=1;
	for(int i=2;i<=n;i++){
		if(!p[i]){
			pri[++cnt]=i;
			mo[i]=-1;
		}
		for(int j=1;j<=cnt&&i*pri[j]<=n;j++){
			p[i*pri[j]]=true;
			if(i%pri[j]==0)break;
			mo[i*pri[j]]=-mo[i];
		}
	}
	for(int i=1;i<=n;i++){
		f[i]=(f[i-1]+mo[i]*i*i)%mod;
	}
}
int H(int n,int m){
	return (n*(n+1)/2%mod)*(m*(m+1)/2%mod)%mod;
}
int G(int n,int m){
	int cnt=0;
	for(int l=1,r=0;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		cnt=(cnt+(f[r]-f[l-1])*H(n/l,m/l))%mod;
	}
	return (cnt%mod+mod)%mod;
}
signed main(){
	n=read(),m=read();
	if(n>m)swap(n,m);
	oula(m);
	for(int l=1,r=0;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		ans=(ans+((l+r)*(r-l+1)/2)%mod*G(n/l,m/l)%mod)%mod;
	}
	cout<<ans;
	return 0;
}

不知为何,本地能过,luoguIDE 不吸氧能过,吸氧小数据RE,大数据MLE,提交全RE。

2022/4/13 10:22
加载中...