求助,本地全部通过,交上去全WA
查看原帖
求助,本地全部通过,交上去全WA
77615
OIerAlbedo楼主2021/5/2 20:05

RT

#include<bits/stdc++.h>
using namespace std;
long long inv[10010000],mu[10010000],squ[10010000];
int prim[10010000];bool vis[10010000];
long long x,MOD,n,m,l,r,sum,i,j,len;
long long ask(long long a,long long b)
{
	long long ans1,ans2,x,i,lft,rit,sum1,sum2,l,r;
	long long ans=0;
    for (l=1,r;l<=min(a,b);l=r+1)
       	      {
       	      r=min(a/(a/l),b/(b/l));
       	      lft=1;rit=a/l;sum1=(lft+rit)*(a/l)/2;
       	      lft=1;rit=b/l;sum2=(lft+rit)*(b/l)/2;
       	      sum1=sum1;sum1%=MOD;sum2=sum2;sum2%=MOD;
       	      sum1*=sum2;sum1%=MOD;
       	      x=mu[r]-mu[l-1];
       	      if (x<0) ans1=(ans1+(-x)*sum1 % MOD) % MOD;
       	      else ans2=(ans2+x*sum1 % MOD) % MOD;
			  }
	ans2%=MOD;ans1%=MOD;
    ans=(ans2-ans1+MOD) % MOD;
	return ans;
}
int main()
{
	MOD=20101009;
	inv[1]=1;
    for (i=2;i<=10000000;i++) inv[i]=((MOD-MOD/i)*inv[MOD % i]) % MOD;
    mu[1]=1;vis[1]=true;
   for (i=2;i<=10000000;i++)
        {
        	if (vis[i]==false)
        	    {
        	    	len++;prim[len]=i;
					mu[i]=-1;
				}
			for (j=1;j<=len,i*prim[j]<=10000000;j++)
			      {
			      	   vis[i*prim[j]]=true;
			      	   mu[i*prim[j]]=mu[i]*mu[prim[j]];
			      	   if (i % prim[j]==0)
			      	        {
							mu[i*prim[j]]=0;break;
							}
				  }
		}
	cin>>n>>m;
	for (i=1;i<=n;i++) mu[i]=mu[i]*i*i;
	for (i=1;i<=max(n,m);i++) mu[i]=mu[i]+mu[i-1];
	for (i=1;i<=max(n,m);i++) 
	      {
	      	x=i*i % MOD;x=x*inv[i] % MOD;squ[i]=(squ[i-1]+x) % MOD;
		  }
	for (l=1,r;l<=min(n,m);l=r+1)
	     {
	     	r=min(n/(n/l),m/(m/l));
	     	sum=sum+(((squ[r]-squ[l-1]+MOD) % MOD)*ask(n/l,m/l)) % MOD;
	     	sum=sum % MOD;
		 }
	cout<<sum<<endl;
	return 0;
}
2021/5/2 20:05
加载中...