求助,人麻了
查看原帖
求助,人麻了
239895
Yusani_huh楼主2021/11/5 23:54

样例过了,30% 数据过了,剩下的数据过不了

#include<bits/stdc++.h>
using namespace std;
#define N 10000003
#define LL long long
#define MOD 20101009
int n,m,pn;
LL p[N],F[N],S[N],ans,inv=10050505;
bool f[N];
int main(){
	scanf("%d%d",&n,&m);
	int s=min(n,m);
	f[1]=true,F[1]=1;
	for(int i=2;i<=s;++i){
		if(!f[i]) p[++pn]=i,F[i]=1-i;
		for(int j=1;j<=pn&&i*p[j]<=s;++j){
			f[i*p[j]]=true;
			if(i%p[j]==0){
				F[i*p[j]]=F[i];
				break;
			}
			F[i*p[j]]=F[i]*F[p[j]];
		}
	}
	for(int i=1;i<=s;++i)
		S[i]=S[i-1]+F[i]*i;
	for(int l=1,r=1;l<=s;l=r+1){
		int np=n/l,mp=m/l;
		r=min(n/np,m/mp);
		LL fs=np*(np+1)*inv%MOD,
		   sc=mp*(mp+1)*inv%MOD,
		   td=(S[r]-S[l-1]+MOD)%MOD;
		ans=(ans+fs*sc%MOD*td%MOD)%MOD;
	}
	printf("%lld\n",ans);
	return 0;
}

如有低级错误请务必狠狠地 D 这个菜鸡

2021/11/5 23:54
加载中...