#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using i64 = int64_t; using i32 = int32_t; int gcd(int x, int y) { while (x % y != 0) { x %= y; swap(x, y); } return y; } int main() { int n; cin >> n; int a[50]; for (int i = 0; i < n; ++i) { cin >> a[i]; } map ds; for (int i = 0; i < n; ++i) { int x = a[i]; for (int d = 2; d * d <= x; ++d) { while (x % (d * d) == 0) { x /= d; } } for (int d = 1; d * d <= x; ++d) { if (x % d == 0) { if (d > 1) ds[d]++; if (d * d != x) ds[x / d]++; } } } i64 ans = (1ll << n) - 1; for (auto p : ds) { int d, c; tie(d, c) = p; int k = 0; for (int f = 2; f * f <= d; ++f) { if (d % f == 0) { ++k; d /= f; } assert(d % f != 0); } if (d > 1) ++k; int sign = k & 1 ? -1 : 1; ans += sign * ((1ll << c) - 1); } cout << ans << endl; return 0; }