i was trying to solve this cool cses problem the other minute and i stumbled across a problem relating modulo: im pretty sure there is nothing wrong with my usage of spoiler dirichlet's hyperbola method, basically what i did was computing the first two sums modulo M then subtracting the last chunk modulo then modulo the actual result applying the rule (a mod m) — (b mod m) mod m = (a — b mod m), but there is a case when b mod m is just greater than a mod m and not b > a, i don't know what to do! can anyone please correct my usage of modulo! thanks in advance :3
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
int G(int n) {
return n*(n+1)/2;
}
signed main() {
int n; cin >> n;
int res = 0, MOD = 1e9 + 7, t = (int)sqrt(n);
for(int i = 1; i <= t ; i++) {
res += G(n/i)%MOD;
res += (i * (n/i))%MOD;
res %= MOD;
}
res -= (G(t)*t)%MOD;
res %= MOD;
cout << res;
}