Pagini recente » Cod sursa (job #2090035) | Cod sursa (job #2072550) | Cod sursa (job #40864) | Cod sursa (job #1778884) | Cod sursa (job #114773)
Cod sursa(job #114773)
var fi,fo:text;
nr_div,i,n,x,max,ct,j:longint;
rez:int64;
nr1:array[1..1000100]of byte;
m:array[1..1000100]of longint;
function prim(nr:longint):boolean;
var i,vari,k:longint;
begin
nr_div:=0; prim:=true; vari:=nr; ct:=1;
for k:=2 to nr div 2 do
if vari<>0 then
begin
if vari mod (k*k)=0 then begin ct:=2; prim:=false; exit; end;
if vari mod k=0 then begin inc(nr_div); vari:=vari div k; end;
end
else break;
if nr_div>0 then prim:=false;
end;
procedure verif(i:longint);
var ok:boolean;
begin
ok:=prim(i);
if ok=true then rez:=rez+(m[i]*(m[i]-1) shr 1)
else
if nr_div>0 then
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);
max:=-maxint;
rez:=0;
for i:=1 to n do
begin
readln(fi,x);
nr1[x]:=1;
if x>max then max:=x; end;
for i:=2 to max do
begin
for j:=1 to max div i do
if nr1[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.