思路:
筛法的灵活应用。
#include<cstdio> #include<iostream> #include<cmath> using namespace std; int a[100010], b[100010], ans[100010]; int main(void) { int n, mx = 0; scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", a + i); b[a[i]]++; mx = max(mx, a[i]); } for(int i = 1; i <= mx; i++) if(b[i]) for(int j = 1; i * j <= mx; j++) ans[i * j] += b[i]; for(int i = 1; i <= n; i++) printf("%d\n", ans[a[i]] - 1); return 0; }