#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = atcoder::modint998244353; #define rep(i,x,lim) for(ll i = (x);i < (ll)(lim);i++) // WA コード 3: 第2ループの境界ミス mint nosimple_wa3(ll n){ mint ans=0; ll temp=n; for(ll i=1;i*i<=n;i++){ ll up=n/i; ll down=n/(i+1); mint a=mint(i).pow(down+1); mint b=mint(i).pow(up-down); if(i==1) ans+=up-down; else{ ans+=a*((b-1)/(i-1)); } temp=n/(i+1); } // --- バグ: rep(i,1,temp+1) であるべきところが rep(i,1,temp) になっている --- // これにより i = temp のケースが計算されない (N=1, N=4 などでWA) rep(i,1,temp){ // --------------------------------------------------------------------- ans+=mint(n/i).pow(i); } return ans; } int main(){ ll N; cin >> N; // N=1 (正解1) でWA (答え0) // N=4 (正解10) でWA (答え6) cout << nosimple_wa3(N).val() << endl; }