Untitled
unknown
plain_text
a year ago
1.4 kB
7
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