bzoj1607

时间:2023-03-08 18:39:48

题解:

帅选法

把相同的放在一起

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+;
int n,a[N],s[N],M,ss[N];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
ss[a[i]]++;
M=max(a[i],M);
}
for (int i=;i<=M;i++)
if (ss[i]!=)for (int j=i;j<=M;j+=i)s[j]+=ss[i];
for (int i=;i<=n;i++)printf("%d\n",s[a[i]]-);
}