k
=
m
i
n
(
n
,
m
)
k=min(n,m)
k=min(n,m)
(
n
2
−
∑
i
=
1
n
(
i
⌊
n
i
⌋
)
)
(
m
2
−
∑
i
=
1
m
(
i
⌊
m
i
⌋
)
)
−
n
m
k
+
∑
i
=
1
k
(
m
i
⌊
n
i
⌋
)
+
∑
i
=
1
k
(
n
i
⌊
m
i
⌋
)
−
∑
i
=
1
k
(
i
2
⌊
n
i
⌋
⌊
m
i
⌋
)
(n^2-\sum_{i=1}^n(i\lfloor\frac{n}{i}\rfloor))(m^2-\sum_{i=1}^m(i\lfloor\frac{m}{i}\rfloor))-nmk+\sum_{i=1}^k(mi\lfloor\frac{n}{i}\rfloor)+\sum_{i=1}^k(ni\lfloor\frac{m}{i}\rfloor)-\sum_{i=1}^k(i^2\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor)
(n2−i=1∑n(i⌊in⌋))(m2−i=1∑m(i⌊im⌋))−nmk+i=1∑k(mi⌊in⌋)+i=1∑k(ni⌊im⌋)−i=1∑k(i2⌊in⌋⌊im⌋)
调了1个小时的分块
P2260
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int mod = 19940417;
ll inv2, inv6;
ll sum(ll l, ll r){
return (l+r)%mod*((r+1)%mod+mod-l)%mod*inv2%mod;
}
ll sum1(ll l, ll r){
return (r*((r+1)%mod)%mod*((2*r%mod+1)%mod)%mod+mod-(l+mod-1)%mod*l%mod*(2*l%mod+mod-1)%mod)%mod*inv6%mod;
}
ll solve1(ll n){
ll ans = 0;
for(ll l = 1, r = 0; l <= n; l = r+1){
r = n/(n/l), ans = (ans+sum(l, r)*(n/l)%mod)%mod;
}
return ans%mod;
}
ll solve2(ll k, ll a, ll b){
ll ans = 0;
for(ll l = 1, r = 0; l <= k; l = r+1){
if(b/l==0) break;
r = min(k, b/(b/l));
ans = (ans+sum(l, r)*(b/l)%mod)%mod;
}
return ans*a%mod;
}
ll solve3(ll k, ll a, ll b){
ll ans = 0;
for(ll l = 1, r = 0; l <= k; l = r+1){
if(a/l==0||b/l==0) break;
ll r1 = min(k, a/(a/l));
ll r2 = min(k, b/(b/l));
r = min(r1, r2);
ans = (ans+sum1(l, r)*(a/l%mod)%mod*(b/l%mod)%mod)%mod;
}
return ans%mod;
}
int main(){
inv2 = 9970209;
inv6 = 3323403;
ll n, m;
cin >> n >> m;
if(n>m) swap(n, m);
ll ans = 0;
ans = (ans+(n*n%mod+mod-solve1(n))%mod)%mod;
ans = ans*((m*m%mod+mod-solve1(m))%mod)%mod;
ans = (ans+mod-n*n%mod*m%mod)%mod;
ans = (ans+solve2(n,m,n))%mod;
ans = (ans+solve2(n,n,m))%mod;
ans = (ans+mod-solve3(n,n,m))%mod;
cout << (ans+mod)%mod << endl;
return 0;
}
P2834
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int mod = 1e9+7;;
ll inv2, inv6;
ll sum(ll l, ll r){
return (l+r)%mod*((r+1)%mod+mod-l)%mod*inv2%mod;
}
ll sum1(ll l, ll r){
return (r*((r+1)%mod)%mod*((2*r%mod+1)%mod)%mod+mod-(l+mod-1)%mod*l%mod*(2*l%mod+mod-1)%mod)%mod*inv6%mod;
}
ll solve1(ll n){
ll ans = 0;
for(ll l = 1, r = 0; l <= n; l = r+1){
r = n/(n/l), ans = (ans+sum(l, r)*(n/l)%mod)%mod;
}
return ans%mod;
}
ll solve2(ll k, ll a, ll b){
ll ans = 0;
for(ll l = 1, r = 0; l <= k; l = r+1){
if(b/l==0) break;
r = min(k, b/(b/l));
ans = (ans+sum(l, r)*(b/l)%mod)%mod;
}
return ans*a%mod;
}
ll solve3(ll k, ll a, ll b){
ll ans = 0;
for(ll l = 1, r = 0; l <= k; l = r+1){
if(a/l==0||b/l==0) break;
ll r1 = min(k, a/(a/l));
ll r2 = min(k, b/(b/l));
r = min(r1, r2);
ans = (ans+sum1(l, r)*(a/l%mod)%mod*(b/l%mod)%mod)%mod;
}
return ans%mod;
}
int main(){
inv2 = 500000004;
inv6 = 166666668;
ll n, m;
cin >> n >> m;
if(n>m) swap(n, m);
ll ans = 0;
ans = (ans+(n*n%mod+mod-solve1(n))%mod)%mod;
ans = ans*((m*m%mod+mod-solve1(m))%mod)%mod;
ans = (ans+mod-n*n%mod*m%mod)%mod;
ans = (ans+solve2(n,m,n))%mod;
ans = (ans+solve2(n,n,m))%mod;
ans = (ans+mod-solve3(n,n,m))%mod;
cout << (ans+mod)%mod << endl;
return 0;
}