Pagini recente » Cod sursa (job #1583203) | Cod sursa (job #1657851) | Cod sursa (job #559795) | Cod sursa (job #1221588) | Cod sursa (job #1744423)
#include <cstdio>
#define MAXM 1000000
char vf[MAXM+1];
int ciur[MAXM+1];
int main(){
FILE*fi,*fout;
int i,n,x,j,max,flag,con,nr,div;
long long rez,y;
fi=fopen("pairs.in" ,"r");
fout=fopen("pairs.out" ,"w");
fscanf(fi,"%d " ,&n);
max=0;
for(i=1;i<=n;i++){
fscanf(fi,"%d " ,&x);
vf[x]=1;
if(x>max)
max=x;
}
for(i=2;i*i<=max;i++)
if(ciur[i]==0)
for(j=2*i;j<=max;j+=i)
ciur[j]=i;
for(i=2;i<=max;i++)
if(ciur[i]==0)
ciur[i]=i;
rez=0;
for(i=2;i<=max;i++){
nr=i;
con=0;
flag=1;
while(nr>1&&flag==1){
div=ciur[nr];
x=0;
while(div==ciur[nr]){
nr/=div;
x++;
}
if(x>1)
flag=0;
con++;
}
if(flag==1){
x=0;
for(j=i;j<=max;j+=i)
x+=vf[j];
y=x;
if(con&1)
rez=rez+(y*(y-1))/2;
else
rez=rez-(y*(y-1))/2;
}
}
y=n;
fprintf(fout,"%lld" ,(y*(y-1))/2-rez);
fclose(fi);
fclose(fout);
return 0;
}