Untitled
unknown
plain_text
a year ago
1.4 kB
11
Indexable
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int numQuery;
long long n;
int prod(long long a, long long b) {
return 1LL * (a % MOD) * (b % MOD) % MOD;
}
int sum(long long n) {
long long a[2] = {n, n + 1};
a[n % 2] /= 2;
return prod(a[0], a[1]);
}
int subtask2(long long n, int lim = -1) {
if (lim < 0) {
lim = n;
}
long long result = (n + 1) % MOD;
for (int d = 1; d <= lim; d++) {
int r = n % d;
long long k = n / d;
result += prod(r + 1, k);
result += prod(sum(k - 1), d);
result %= MOD;
}
return result;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
freopen("treedis.inp", "r", stdin);
freopen("treedis.out", "w", stdout);
cin >> numQuery;
while (numQuery--) {
cin >> n;
long long answer = 0;
const int R = sqrt(n);
answer += subtask2(n, R);
for (int l = 2; l <= n / R; l++) {
long long dmax = n / (l - 1);
if (dmax <= R) {
continue;
}
answer += prod(n, (dmax - R));
answer -= prod(l - 1, sum(dmax) - sum(R) + MOD);
answer += dmax - R;
answer %= MOD;
}
if (answer < 0) {
answer += MOD;
}
cout << answer << '\n';
}
return 0;
}
Editor is loading...
Leave a Comment