using int64 = longlong; constlonglong MOD = 1234567891;
// a^b % mod longlongmodpow(longlong a, longlong b){ longlong r = 1; while (b) { if (b & 1) r = (__int128)r * a % MOD; a = (__int128)a * a % MOD; b >>= 1; } return r; }
using int64 = longlong; constlonglong MOD = 1234567891;
// a^b % mod longlongmodpow(longlong a, longlong b){ longlong r = 1; while (b>0) {//这里gpt写成b,死循环了 if (b & 1) r = (__int128)r * a % MOD; a = (__int128)a * a % MOD; b >>= 1; } return r; }
longlong P = modpow(2, n - 1); // 2^(n-1) longlong ans = 0;
longlong x = 1; int ccnt=0; while (x<=n) { longlong m = n / x; // 当前段的 floor(n/x) longlong r = n / m; // 该 m 对应的 x 区间为 [x, r] // cout<<x<<" "<<r<<"\n"; // sum_x = x + (x+1) + ... + r longlong cnt = r - x + 1; longlong sum_x = (x + r) * (__int128)cnt / 2 % MOD;
longlong term = ((P - modpow(2, n - m)) % MOD+MOD)%MOD;//这里写成n-m-1了,不对 longlong contrib = (__int128)sum_x * term % MOD;
ans = (ans + contrib) % MOD;
x = r + 1; } // cout<<"! "<<n<<"\n"; cout << (ans % MOD) << "\n"; return0; }