记录编号 |
600622 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[清华集训 2012] 模积和 |
最终得分 |
100 |
用户昵称 |
李奇文 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.078 s |
提交时间 |
2025-05-09 18:50:31 |
内存使用 |
3.28 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const long long mod=19940417,inl=9970209,inr=3323403;
ll i,j,k,m,n,ans,cnt,tot,dfn;
ll ans1(ll x){
return x*(x+1)%mod*inl%mod;
}
ll ans2(ll x){
return x*(x+1)%mod*(2*x+1)%mod*inr%mod;
}
int main(){
freopen("modmuladd.in","r",stdin);
freopen("modmuladd.out","w",stdout);
cin>>n>>m;
if(n>m) swap(n,m);
int l=1,r,cnt=n*n%mod;
while(l<=n){
r=n/(n/l);
cnt=(cnt-(ans1(r)-ans1(l-1)+mod)%mod*(n/l)%mod+mod)%mod;
l=r+1;
}
l=1,tot=m*m%mod;
while(l<=m){
r=m/(m/l);
tot=(tot-(ans1(r)-ans1(l-1)+mod)%mod*(m/l)%mod+mod)%mod;
l=r+1;
}
l=1;
while(l<=n){
ll a,b,c;
r=min(n/(n/l),m/(m/l));
a=(r-l+1)*n%mod*m%mod;
b=(ans1(r)-ans1(l-1)+mod)%mod*((n/l)*m%mod+(m/l)*n%mod)%mod;
c=(ans2(r)-ans2(l-1)+mod)%mod*(n/l)%mod*(m/l)%mod;
dfn=(dfn+a-b+c+mod)%mod;
l=r+1;
}
ans=(cnt*tot%mod-dfn+mod)%mod;
cout<<ans<<endl;
return 0;
}