您的位置:首页 > 其它

2017年8月7日提高组T1 呵呵

2017-08-07 20:00 155 查看
Description

这天,小A得到了一个序列a[1],a[2]…a
,他想知道有多少个二元组(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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: