#include<bits/stdc++.h>
usingnamespacestd;#define ll long long
constllmod=1e9+7;lln,m;llinv6;llqpow(lla,llb){llres=1;while(b){if(b&1)res=res*a%mod;a=(a*a)%mod;b>>=1;}returnres;}llf(lln){returnn*(n+1)%mod*(2*n+1)%mod*inv6%mod;}llsolve(lln){llans=(n*(n+1)/2%mod)*n;// ll ans = n*n%mod*(n+1)/2%mod;
for(inti=1,j;i<=n;i=j+1){/*i=j+1,以及n/i要加括号*/j=n/(n/i);/*其实j不会大于n*/if(j>n)j=n;ans=(ans-(f(j)-f(i-1))*(n/i)%mod+mod)%mod;/*只要保证每次相减时两个都是正数
然后结果再来一次保证正数操作就不会出错*/}returnans;}intmain(){ios::sync_with_stdio(false);cin.tie(0);inv6=qpow(6,mod-2);cin>>n>>m;llans=solve(n)*solve(m)%mod;cout<<ans<<endl;return0;}
菜鸡我踩坑
坑我35mins
1
2
3
// bug是因为除号必须在mod前!
llans=(n*(n+1)/2%mod)*n;// ll ans = n*n%mod*(n+1)/2%mod;