Description
这天,小A得到了一个序列a[1],a[2]…a[n],他想知道有多少个二元组(i,j)满足i!=j且a[i]是a[j]的因数。
Input
第一行有一个正整数n,第二行包含n个整数。
Output
输出一行,表示满足条件的二元组个数。
Sample Input
5
2 4 5 2 6
Sample Output
6
Hint
对于前30%的数据,n,k<=1000.
对于100%的数据,n<=2000000,a[i]<=2000000。
分析:
其实就很简单。我们对于每个数i,如果对答案有贡献,则序列中存在n*i。由于与序列顺序无关,对于每个i都有相同的对数,我们只要求出其中一个数与后面的数有多少个数可以成对,在乘一下就好。把数据可以存在一个桶中。
代码:
var
n,x,e:longint;
t,ans:longint;
a:array [1..4000001] of longint;
i,j:longint;
begin
readln(e);
for i:=1 to e do
begin
read(x);
if x=0 then continue;
inc(a[x]);
if x>n then n:=x;
end;
for i:=1 to n do
begin
if a[i]=0 then continue;
j:=i; t:=0;
while j<=n do
begin
t:=t+a[j];
j:=j+i;
end;
ans:=ans+(t-1)*a[i];
end;
writeln(ans);
end.