题解:
帅选法
把相同的放在一起
代码:
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,a[N],s[N],M,ss[N]; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); ss[a[i]]++; M=max(a[i],M); } for (int i=1;i<=M;i++) if (ss[i]!=0)for (int j=i;j<=M;j+=i)s[j]+=ss[i]; for (int i=1;i<=n;i++)printf("%d\n",s[a[i]]-1); }