#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
vector<int> lp(N);
vector<bool> p(N, 1);
vector<vector<int>> pf(N), divisor(N);

int precompute() {
  iota(lp.begin(), lp.end(), 0);
  for (int i = 2; i < N; i++) {
    if (p[i]) {
      for (int j = i; j < N; j += i) {
        lp[j] = min(lp[j], i);
        if (i ^ j) p[j] = 0;
      }
    }
  }
  for (int i = 2; i < N; i++) {
    for (int j = i; j < N; j += i) {
      divisor[j].emplace_back(i);
    }
  }

  for (int i = 2; i < N; i++) {
    int x = i;
    while (lp[x] > 1) {
      int t = lp[x];
      pf[i].push_back(t);
      while (x % t == 0) {
        x /= t;
      }
    }
  }
  return 0;
} 

int pre = precompute();


int main() {
  cin.tie(0)->sync_with_stdio(0);
  
  int n;
  cin >> n;
  vector<int> A(n);
  for (int& x : A) cin >> x;

  vector<int> cnt(N);
  for (int i = 0; i < n; i++) {
    for (int d : divisor[A[i]]) cnt[d]++;
  }
  vector<int> ans(n);
  for (int i = 0; i < n; i++) {
    vector<int> pr;
    for (int p : pf[A[i]]) pr.emplace_back(p);
    for (int d : divisor[A[i]]) cnt[d]--;

    int k = pr.size();
	
	// inclusion exclusion
    for (int mask = 1; mask < 1 << k; mask++) {
      int prod = 1;
      for (int bit = 0; bit < k; bit++) {
        if (mask >> bit & 1) prod *= pr[bit];
      }
      if (__builtin_popcount(mask) & 1) {
        ans[i] += cnt[prod];
      } else {
        ans[i] -= cnt[prod];
      }
    }
    for (int d : divisor[A[i]]) cnt[d]++;
  }
  for (int x : ans) cout << x << ' ';
  return 0;
}