- #include <bits/stdc++.h>
- using namespace std;
-
- long long mpow(long long a, long long b) {
- long long ans = 1;
- while(b) {
- if(b&1) ans *= a;
- a *= a;
- b >>= 1;
- }
- return ans;
- }
-
- int main() {
- //freopen("inp14.txt", "r", stdin);
- //freopen("out14.txt", "w", stdout);
- int t = 1;
- //cin >> t;
- while(t--) {
- int n;
- cin >> n;
- long long int msks[n + 1], ans = 0;
- memset(msks, 0, sizeof(msks));
- for(int i = 2; i <= n; i++)
- for(int j = 1; j < i; j++)
- if(!(i%j))
- msks[i] ^= (1LL<<(j - 1));
- for(int i = 0; i < (1LL<<(n/3)); i++) {
- long long int now = 0;
- bool badsub = 0;
- for(int j = 1; j <= n/3; j++)
- if((i&msks[j]) && (i&(1LL<<(j - 1)))) now ^= (1LL<<(j - 1));
- for(int j = 1; j <= n/3; j++)
- if((now&msks[j]) && (i&(1LL<<(j - 1)))) badsub = 1;
- if(badsub) continue;
- vector<bool> bad(n + 1, 0);
- for(int j = 1; j <= n/3; j++) {
- if(now&(1LL<<(j - 1))) {
- for(int k = j + j; k <= n; k+=j)
- bad[k] = 1;
- }
- }
- int s1 = n - n/3, s2 = 0;
- for(int j = n/3 + 1; j <= n; j++)
- if(bad[j]) s1--;
- for(int j = n/3 + 1; j <= n/2; j++) {
- if((i&msks[j]) && !bad[j]) {
- if(!bad[2*j]) s1 -= 2, s2++;
- }
- }
- ans += mpow(2, s1)*mpow(3, s2);
- }
- cout << ans << "\n";
- }
- }