import sys
input = sys.stdin.readline
inf = float('inf')
def getInt():
return int(input())
def getStr():
return input().strip()
def getList(split=True):
s = getStr()
if split:
s = s.split()
return map(int, s)
t = 1
M = 998244353
def solve():
n = getInt()
dp = [0] * (n+1)
dp[0] = 1
for i in range(2, 2*n+1, 2):
for j in range(i, 2*n+1, i):
dp[j//2] += 1
c = 0
for i in range(1, n+1):
dp[i] += c
dp[i] %= M
c += dp[i]
c %= M
print(dp[-1])
for _ in range(t):
solve()
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
using ll = long long;
using P = pair<ll, ll>;
void solve() {
int n;cin>>n;
vector<int> dp(n+1);
int sum = 1;
dp[0] = 1;
int mod = 998244353;
for(int i = 1;i<=n;i++){
for(int j = 2*i;j<=n;j+=i){
dp[j] ++;
}
}
for(int i = 1;i<=n;i++){
dp[i] += sum;
dp[i] %= mod;
sum += dp[i];
sum %= mod;
}
cout << dp[n] << endl;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// int t;cin >> t;while (t--)
solve();
return 0;
}
1560A - Dislike of Threes | 36. Valid Sudoku |
557. Reverse Words in a String III | 566. Reshape the Matrix |
167. Two Sum II - Input array is sorted | 387. First Unique Character in a String |
383. Ransom Note | 242. Valid Anagram |
141. Linked List Cycle | 21. Merge Two Sorted Lists |
203. Remove Linked List Elements | 733. Flood Fill |
206. Reverse Linked List | 83. Remove Duplicates from Sorted List |
116. Populating Next Right Pointers in Each Node | 145. Binary Tree Postorder Traversal |
94. Binary Tree Inorder Traversal | 101. Symmetric Tree |
77. Combinations | 46. Permutations |
226. Invert Binary Tree | 112. Path Sum |
1556A - A Variety of Operations | 136. Single Number |
169. Majority Element | 119. Pascal's Triangle II |
409. Longest Palindrome | 1574A - Regular Bracket Sequences |
1574B - Combinatorics Homework | 1567A - Domino Disaster |