很神奇的爆了#2,#3,#4,#5和#12
十万火急,在线等!!!
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
bool prime[1000005],IsOneIn;
struct cow{
int id,val;
}paper[114514];
struct ans{
int id,cnt;
}factor[114514];
int cmp1(cow a,cow b){
return a.val>b.val;
}
int cmp2(ans a,ans b){
return a.id<b.id;
}
int main(){
scanf("%d",&n);
for(int i=1;i*i<=1000000;i++){
for(int j=i*i;j<=1000000;j+=i){
prime[j]=true;
}
}
for(int i=1;i<=n;i++){
scanf("%d",&paper[i].val);
paper[i].id=i;
if(paper[i].val==1) IsOneIn=true;
}
sort(paper+1,paper+1+n,cmp1);
for(int i=1;i<=n;i++){
factor[i].id=paper[i].id;
if(paper[i].val==paper[i-1].val){
factor[i].cnt=factor[i-1].cnt;
continue;
}
if(prime[paper[i].val]==false){
if(paper[i].val==1 || IsOneIn==false) factor[i].cnt=0;
else{
int k=i+1;
while(paper[k].val==paper[i].val){
k++;
factor[i].cnt++;
}
}
}else{
for(int j=i+1;j<=n;j++){
if(paper[i].val%paper[j].val==0) factor[i].cnt++;
}
}
}
sort(factor+1,factor+1+n,cmp2);
for(int i=1;i<=n;i++){
printf("%d\n",factor[i].cnt);
}
return 0;
}