70pt求助
查看原帖
70pt求助
456675
a_sad_soul楼主2023/12/19 17:59
#include<bits/stdc++.h>
#define MOD 20101009
#define MAXN 10000007
using namespace std;
long long g(long long n ,long long m){return ((((n+n*n)/2)%MOD)*(((m*m+m)/2)%MOD))%MOD;}
long long mu[MAXN];
long long p[MAXN],cnt;
bool vis[MAXN];
long long f[MAXN];
void Prime()
{
	mu[1]=1;
	f[1]=1;
	for(long long i=2;i<MAXN;++i)
	{
		if(!vis[i])
		{
			mu[i]=-1;
			p[++cnt]=i;
		}
		for(long long j=1;j<=cnt&&i*p[j]<MAXN;++j)
		{
			long long x=i*p[j];
			vis[x]=1;
			if(i%p[j]==0)
			{
				mu[x]=0;
				break;
			}
			mu[x]=-mu[i];
		}
		f[i]=(f[i-1]+(((mu[i]+MOD)%MOD)*i*i)%MOD)%MOD;
	}
}
long long sum(long long n,long long m)
{
	long long re=0;
	for(long long i=1,j;i<=min(n,m);i=j+1)
	{
		j=min(n/(n/i),m/(m/i));
		re=(re+(((f[j]-f[i-1]+MOD)%MOD)*(g(n/i,m/i)%MOD))%MOD)%MOD;
	}
	return re;
}
long long getans(long long n,long long m)
{
	long long re=0;
	for(long long i=1,j;i<=min(n,m);i=j+1)
	{
		
		j=min(n/(n/i),m/(m/i));
		re=(re+((((((j-i+1)*(i+j))/2)%MOD)*(sum(n/i,m/i)%MOD)%MOD))%MOD)%MOD;
	}
	return re;
}
long long n,m;
int main()
{
	scanf("%lld%lld",&n,&m);
	Prime();
	cout<<getans(n,m)<<endl;
	return 0;
}

贴一个数据

7718820 8445880

8534312

2023/12/19 17:59
加载中...