自己和sb一样,这种题目都会WA。难受~
先读入统计一遍所有的数
之后因为每个数只会被最小的因数除去
所以枚举每个数的倍数.
1 #include <cstdio> 2 #include <cstring> 3 4 int n; 5 int now[100005],vis[1000005],ask[1000005]; 6 7 int main(){ 8 memset(ask,-1,sizeof(ask)); 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++){ 11 scanf("%d",&now[i]); 12 vis[now[i]]++; 13 } 14 for(register int i=1;i<=1000000;i++){ 15 if(vis[i]){ 16 for(int j=1;j<=1000000 && i*j<=1000000;j++){ 17 ask[i*j]+=vis[i]; 18 } 19 } 20 } 21 for(int i=1;i<=n;i++){ 22 printf("%d\n",ask[now[i]]); 23 } 24 return 0; 25 }
时间: 2024-10-12 02:38:14