【输入样例】
5
2
1
2
3
4
【输出样例】
2
0
2
1
3
解析:
直接求某个数的约数不好计算,一般都是反过来计算倍数。
统计每个数的个数,遍历累加。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int n,a[N],ans[N],cnt[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
cnt[a[i]]++;
}
for(int i=1;i<N;i++)
for(int j=i;j<N;j+=i)
ans[j]+=cnt[i];
for(int i=1;i<=n;i++) printf("%d\n",ans[a[i]]-1);
return 0;
}