- def solve(n):
- if n <= 3:
- return 1 << n
-
- ans = 0
- L = n//3
- for mask in range(1 << L):
- ar = [1]*(n+1)
- for i in range(L):
- if ((mask >> i) & 1) == 0:
- ar[i+1] = 0
- continue
- for j in range(2*(i+1), L+1, i+1):
- if ((mask >> (j-1)) & 1) == 0:
- continue
- ar[j] = max(ar[j], ar[i+1] + 1)
- if max(ar) > 2:
- continue
- for i in range(1, L+1):
- if ar[i] == 2:
- for x in range(i, n+1, i):
- if x > L:
- ar[x] = -1
- for i in range(1, L+1):
- if ar[i] == 1:
- for x in range(i, n+1, i):
- if x > L and 2*x <= n and ar[x] != -1 and ar[2*x] != -1:
- ar[x] = 2
- ar[2*x] = 2
- one, two = 0, 0
- for i in range(L+1, n+1):
- one += ar[i] == 1
- two += ar[i] == 2
- ans += pow(2, one) * pow(3, two//2)
- return ans
-
- n = int(input())
- print(solve(n))