本地过了第一个数据,评测输出0求助
查看原帖
本地过了第一个数据,评测输出0求助
768416
Ac_forever楼主2024/2/25 09:52
using ll=long long;
#include<cstdio>
#include<iomanip>
#include<iostream>
#define int long long
#define N 10000001
#define mod 20101009
using namespace std;
int n,m,mu[N],p[N],qzh[N];
bool not_p[N];
ll f(int x,int y){
	return 1ll*x*(x+1)/2%mod*1ll*y*(y+1)/2%mod;
}
ll Sum(int x,int y){
	ll ans=0;
	for(int i=1,j;i<=min(x,y);i=j+1){
		j=min(x/(x/i),y/(y/i));
		ans=(ans+(qzh[j]-qzh[i-1]+mod)%mod*f(x/i,y/i)%mod)%mod;
	}
	return ans;
}
ll solve(int x,int y){
	ll ans=0;
	for(int i=1,j;i<=min(x,y);i=j+1){
		j=min(x/(x/i),y/(y/i));
		ans=(ans+1ll*(j-i+1)%mod*(i+j)%mod/2*Sum(x/i,y/i)%mod)%mod;
	}
	return ans;
}
signed main(){
	scanf("%lld%lld",&n,&m);
	if(n>m)swap(n,m);
	mu[1]=1;
	for(int i=2;i<N;i++){
		if(!not_p[i]){
			p[++p[0]]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=p[0];j++){
			if(i*p[j]>N)break;
			not_p[i*p[j]]=1;
			if(i%p[j]==0){
				mu[i*p[j]]=0;
				break;
			}
			mu[i*p[j]]=-mu[i];
		}
	}
	for(int i=1;i<N;i++)qzh[i]=(qzh[i-1]+1ll*(mu[i]+mod)*i*i%mod)%mod;
	printf("%lld",solve(n,m));
}
2024/2/25 09:52
加载中...