题目大意:
题目链接
对给定的n和k,求
G
(
n
,
k
)
=
∑
i
=
1
n
k
m
o
d
i
G(n,k)=\sum_{i=1}^{n}k\ mod \ i
G(n,k)=∑i=1nk mod i
解题思路:
数论分块模板题
式子转换为:
G
(
n
,
k
)
=
n
k
−
∑
i
=
1
n
⌊
k
i
⌋
∗
i
G(n,k)=nk-\sum_{i=1}^{n}\left \lfloor \frac{k}{i} \right \rfloor * i
G(n,k)=nk−∑i=1n⌊ik⌋∗i
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k, ans = 0;
int main() {
cin >> n >> k;
ans = n * k;
ll res = 0, i = 1, j, tmp;
while (i <= min(n, k)) {
j = min(k / (k / i), n);
tmp = (j + i) * (j - i + 1) / 2;
res += (k / i) * (tmp);
i = j + 1;
}
ans -= res;
cout << ans << endl;
}