bzoj2956 模积和
2019-04-13 14:23发布
生成海报
题目
来来来,数学推公式吧。。。。
之后再用求和算一算就好了。。。
using namespace std;
LL m,n,ans,tmp1,tmp2,tmp3,last;
inline char nc()
{
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline LL read()
{
LL x=0,b=1;
char c=nc();
for(;!(c<='9'&&c>='0');c=nc())if(c=='-')b=-1;
for(;c<='9'&&c>='0';c=nc())x=x*10+c-'0';
return x*b;
}
inline LL sum(LL x)
{
return x*(x+1)%mod*(2*x+1)%mod*3323403%mod;
}
int main()
{
// freopen("in.txt","r",stdin);
n=read(),m=read();
// ans=0;
// for(LL i=1;i<=n;i++)
// for(LL j=1;j<=m;j++)
// {
// if(i==j)continue;
// ans=(LL)(ans+(n%i)*(m%j))%mod;
// }
// cout<if(n>m)swap(m,n);
tmp1=n*n%mod;
for(LL i=1;i<=n;i=last+1)
{
last=n/(n/i);
tmp1=((tmp1-(n/i)*(last+i)%mod*(last-i+1)%mod*9970209%mod)%mod+mod)%mod;
}
tmp2=m*m%mod;
for(LL i=1;i<=m;i=last+1)
{
last=m/(m/i);
tmp2=((tmp2-(m/i)*(last+i)%mod*(last-i+1)%mod*9970209%mod)%mod+mod)%mod;
}
tmp3=n*n%mod*m%mod;
for(LL i=1;i<=n;i=last+1)
{
last=min(n/(n/i),m/(m/i));
tmp3=((tmp3-n*(m/i)*(last+i)%mod*(last-i+1)%mod*9970209%mod)%mod+mod)%mod;
tmp3=((tmp3-m*(n/i)*(last+i)%mod*(last-i+1)%mod*9970209%mod)%mod+mod)%mod;
tmp3=((tmp3+(n/i)*(m/i)%mod*(sum(last)-sum(i-1)))%mod+mod)%mod;
}
cout<<((tmp1*tmp2%mod-tmp3)%mod+mod)%mod;
return 0;
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮