某种意义上真毒瘤?我没看懂题啊...于是看了题解
就是筛约数的那种方法,复杂度调和级数保证O(nlogn)
所以这题啥意思啊
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1000005;
int n,mx,a[N],c[N],d[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
c[a[i]]++;
if(a[i]>mx)
mx=a[i];
}
for(int i=1;i<=mx;i++)
if(c[i])
for(int j=i;j<=mx;j+=i)
d[j]+=c[i];
for(int i=1;i<=n;i++)
printf("%d
",d[a[i]]-1);
return 0;
}