#include #include #include #define MOD 998244353 long long kth_root(long long n, int k) { if (n == 1) return 1; long long low = 1, high = 2000000000LL; while (low < high) { long long mid = (low + high + 1) / 2; long long power = 1; int overflow = 0; // Compute mid^k with overflow check for (int i = 0; i < k; i++) { if (power > n / mid) { overflow = 1; break; } power *= mid; } if (overflow) { high = mid - 1; } else if (power <= n) { low = mid; } else { high = mid - 1; } } return low; } long long compute_product(long long i) { if (i == 1) return 1; long long product = 1; for (int k = 1; k <= 63; k++) { long long root = kth_root(i, k); if (root == 1) break; product *= root; } return product; } int main() { long long N; scanf("%lld", &N); long long result = 0; for (long long i = 1; i <= N; i++) { long long prod = compute_product(i); result = (result + prod) % MOD; } printf("%lld\n", result); return 0; }