今天是 B e s s i e Bessie Bessie 的生日,并且现在是聚会的游戏时间。 B e s s i e Bessie Bessie 让编号为 1 ? N 1~ N 1?N 的 N N N 头奶牛围成一个圈坐(所以除了最后一头牛,第 i i i 头奶牛与第 i ? 1 i-1 i?1 和 i + 1 i+1 i+1 头奶牛相邻,第 N N N 头奶牛和第 N ? 1 N-1 N?1 头与第 1 头奶牛相邻)。同时, F a r m e r Farmer Farmer J o h n John John 拿了个桶,在桶里装了十亿张小纸条,每张小纸条上写有某个范围在 [ 1 , 1 0 6 ] [1,10^6] [1,106]的整数。
接着,每头奶牛轮流从这个巨桶中抽取一个数 A i ( 1 ≤ A i ≤ 1 0 6 ) A_i(1≤A_i≤10^6) Ai?(1≤Ai?≤106)(当然这些数没必要两两不同)。然后第 i i i 头奶牛走一圈,如果奶牛 i i i 手中的数字能够被奶牛 j ( j ≠ i ) j(j\neq i) j(j=i) 手中的数字整除,那么奶牛 i i i 会拍奶牛 j j j 的头。走完一圈后,奶牛 i i i 回到原来的位置。
奶牛们想让你帮他们计算,对于每头奶牛,它需要拍多少头奶牛的头?
第一行包含一个整数
N
N
N;
接下来第二到第
N
+
1
N+1
N+1 行每行包含一个整数
A
i
A_i
Ai?。
第一到第 N N N 行,第 i i i 行的输出表示第 i i i 头奶牛要拍打的牛数量。
5
2
1
2
3
4
2
0
2
1
3
第一头奶牛会拍第二、第三头奶牛,第二头牛不会拍任何奶牛的头,等等。对于全部数据, 1 ≤ N ≤ 1 0 5 1≤N≤10^5 1≤N≤105。
#include <bits/stdc++.h>
using namespace std;
const int N=2e5,M=2e6;
int n,a[N],k[M];
int main() {
cin >>n;
for (int i=1;i<=n;i++) {
cin >>a[i];
k[a[i]]++;
}
for (int i=1;i<=n;i++) {
int tt=0,j;
for (j=1;j*j<=a[i];j++) {
if(a[i]%j==0)
tt+=k[j]+k[a[i]/j];
}
j--;
if (j*j==a[i]) tt-=k[j];
cout <<tt-1 <<endl;
}
return 0;
}