Pagini recente » Cod sursa (job #1453676) | Cod sursa (job #170853) | Cod sursa (job #2045264) | Cod sursa (job #278542) | Cod sursa (job #116005)
Cod sursa(job #116005)
var fi,fo:text;
n,x,nr_div,i,j,max:longint;
ct:byte;
rez:int64;
nr:array[1..1000010]of byte;
m:array[1..1000010]of longint;
prime:array[1..1001000]of byte;
procedure gen;
var i,j:longint;
begin
i:=3;
prime[1]:=1;
while i<=1000000 do
begin
if prime[i]=0 then
begin
j:=3*i;
while j<=1000000 do
begin
prime[j]:=1;
inc(j,i);
end;
end;
inc(i,2);
end;
end;
{procedure prim(nr:longint);
var i:longint;
begin
i:=3; nr_div:=1; ct:=1;
if ((prime[nr]=0)and(nr and 1=1))or(nr=2) then exit;
if (sqrt(nr)=trunc(sqrt(nr)))or(nr mod 4=0) then begin ct:=2; exit; end;
if nr mod 2 = 0 then
begin
inc(nr_div);
nr:=nr shr 1;
if (prime[nr]=0)and(nr mod 2=1) then exit; end;
while i<=trunc(sqrt(nr)) do
begin
if nr mod i=0 then
begin
if nr mod (i*i)=0 then begin ct:=2; exit; end;
inc(nr_div);
nr:=nr div i;
if (prime[nr]=0)and(nr and 1=1) then exit;
end;
inc(i,2);
end;
end;}
procedure prim(nr:longint);
var i:longint;
begin
ct:=1; nr_div:=0;
for i:=2 to 1000000 do
if (i=2)or((prime[i]=0)and(i and 1 = 1)) then
if nr mod i=0 then
begin
if nr=1 then exit;
inc(nr_div);
nr:=nr div i;
if nr mod i =0 then begin ct:=2; exit; end;
end;
end;
procedure verif(i:longint);
begin
prim(i);
if ct=1 then
if nr_div and 1 = 1 then rez:=rez + (m[i]*(m[i]-1)) shr 1
else rez:=rez - (m[i]*(m[i]-1)) shr 1;
end;
begin
assign(fi,'pairs.in'); reset(fi);
assign(fo,'pairs.out'); rewrite(fo);
readln(fi,n);
rez:=0; max:=-maxint;
m[1]:=0;
gen;
for i:=1 to n do
begin
readln(fi,x);
{if x and 1=0 then inc(m[2]);}
nr[x]:=1;
{if max<x then max:=x;}
end;
{if (m[2]>0) then verif(2);}
for i:=2 to 1000000 do
begin
for j:=1 to 1000000 div i do
if nr[i*j]=1 then inc(m[i]);
if (m[i]>0) then verif(i);
end;
rez:=(n*(n-1)) shr 1 - rez;
writeln(fo,rez);
close(fi); close(fo);
end.