1 #include <cstdio>
2 #include <cstring>
3 #include <cstdlib>
4 #include <cmath>
5 #include <deque>
6 #include <vector>
7 #include <queue>
8 #include <iostream>
9 #include <algorithm>
10 #include <map>
11 #include <set>
12 #include <ctime>
13 using namespace std;
14 typedef long long LL;
15 typedef double DB;
16 #define For(i, s, t) for(int i = (s); i <= (t); i++)
17 #define Ford(i, s, t) for(int i = (s); i >= (t); i--)
18 #define Rep(i, t) for(int i = (0); i < (t); i++)
19 #define Repn(i, t) for(int i = ((t)-1); i >= (0); i--)
20 #define rep(i, x, t) for(int i = (x); i < (t); i++)
21 #define MIT (2147483647)
22 #define INF (1000000001)
23 #define MLL (1000000000000000001LL)
24 #define sz(x) ((int) (x).size())
25 #define clr(x, y) memset(x, y, sizeof(x))
26 #define puf push_front
27 #define pub push_back
28 #define pof pop_front
29 #define pob pop_back
30 #define ft first
31 #define sd second
32 #define mk make_pair
33 inline void SetIO(string Name) {
34 string Input = Name+".in",
35 Output = Name+".out";
36 freopen(Input.c_str(), "r", stdin),
37 freopen(Output.c_str(), "w", stdout);
38 }
39
40 const int N = 1010;
41 int Prime[N], Tot;
42 bool Visit[N];
43 int n;
44 LL Dp[N][N], Ans;
45
46 inline void Input() {
47 scanf("%d", &n);
48 }
49
50 inline void GetPrime() {
51 Tot = 0;
52 For(i, 2, n) {
53 if(!Visit[i]) Prime[++Tot] = i;
54 For(j, 1, Tot) {
55 if(Prime[j]*i > n) break;
56 Visit[Prime[j]*i] = 1;
57 if(!(i%Prime[j])) break;
58 }
59 }
60 }
61
62 inline void Solve() {
63 GetPrime();
64 Dp[0][0] = 1;
65 For(i, 1, Tot) {
66 For(j, 0, n) Dp[i][j] = Dp[i-1][j];
67 for(int x = Prime[i]; x <= n; x *= Prime[i])
68 For(j, 0, n-x)
69 Dp[i][j+x] += Dp[i-1][j];
70 }
71
72 For(i, 0, n) Ans += Dp[Tot][i];
73 cout<<Ans<<endl;
74 }
75
76 int main() {
77 SetIO("1025");
78 Input();
79 Solve();
80 return 0;
81 }