#include #define rep(i,s,n) for (int i = (int)(s); i < (int)(n); i++) #define reb(i,s,n) for (int i = (int)(n)-1; i >= (int)(s); i--) #define all(v) begin(v), end(v) using namespace std; using ll = long long; bool chmin(auto &a, auto b) { return a > b ? a = b, 1 : 0; } bool chmax(auto &a, auto b) { return a < b ? a = b, 1 : 0; } template ostream &operator<<(ostream &os, const vector &a){ if (a.empty()) return os; os << a.front(); for (auto e : a | views::drop(1)){ os << ' ' << e; } return os; } void dump(auto ...vs){ ((cout << vs << ' '), ...) << endl; } #include using mint = atcoder::modint998244353; void solve(){ ll n; cin >> n; mint ans = 0; auto add = [&](ll l, ll r, mint v){ if (v.val() == 1u){ ans += r - l; return ; } ans += v.pow(l) * (1 - v.pow(r-l)) / (1 - v); }; for (ll l = 1, r = 1; l <= n; l = r){ ll v = n / l; r = n / v + 1; // x in [l, r) : v^x add(l,r,v); } cout << ans.val() << '\n'; } int main(){ cin.tie(0)->sync_with_stdio(0); solve(); }