#include #include #include #define rep(i, n) for(i = 0; i < n; i++) using namespace std; int n; int a[50]; int main() { int i, j; cin >> n; rep(i, n) cin >> a[i]; vector yakus; rep(i, n) { for (j = 1; j * j <= a[i]; j++) { if (a[i] % j == 0) { yakus.push_back(j); if (j != a[i] / j) { yakus.push_back(a[i] / j); } } } } sort(yakus.begin(), yakus.end()); yakus.erase(unique(yakus.begin(), yakus.end()), yakus.end()); vector F; //F[i] = gcdがyakus[i]の倍数になる部分列の個数 rep(i, yakus.size()) { int cnt = 0; rep(j, n) { if (a[j] % yakus[i] == 0) { cnt++; } } F.push_back((1LL << cnt) - 1); } vector G; //G[i] = gcdがちょうどyakus[i]になる部分列の個数 G.resize(yakus.size()); for (i = yakus.size() - 1; i >= 0; i--) { G[i] = F[i]; for (j = i + 1; j < yakus.size(); j++) { if (yakus[j] % yakus[i] == 0) { G[i] -= G[j]; } } } cout << G[0] << endl; return 0; }