Pagini recente » Cod sursa (job #572272) | Cod sursa (job #1051921) | Cod sursa (job #338006) | Cod sursa (job #719783) | Cod sursa (job #158628)
Cod sursa(job #158628)
#include<stdio.h>
long x[1000002],p[200],a[1000002],v[1000002],n,max;
long long rez;
int main()
{ long aux,i,j,ok,mult,m,k;
//citire date
FILE *f=fopen("pairs.in","r");
fscanf(f,"%ld",&n);
max=0;
for (i=1;i<=n;i++)
{ fscanf(f,"%ld",&aux);
if (aux>max) max=aux;
a[aux]=1;
}
fclose(f);
//construiesc vector x
for (i=2;i<=max;i++)
for (j=1;i*j<=max;j++)
if (a[i*j]) x[i]++;
//ciur
p[1]=2;p[2]=3;m=2;
for (i=5;i<1200;i+=2)
{ ok=1;j=1;
while (p[j]*p[j]<=i&&ok)
if (i%p[j]==0) ok=0;
else j++;
if (ok) p[++m]=i;
}
//determin rez
for (i=2,rez=0;i<=max;i++)
if (x[i]>1)
{
aux=i;
j=1;ok=1;
k=0;
while (j<=m&&p[j]<=aux&&ok)
{ mult=0;
while (aux%p[j]==0)
{ mult++;
aux/=p[j]; }
if (mult>1) ok=0;
else { j++;
if (mult>0) k++; }
}
if (ok&&aux<=1)
if (k%2) rez+=(long long)x[i]*(x[i]-1)/2;
else rez-=(long long)x[i]*(x[i]-1)/2;
}
//afisare
FILE *g=fopen("pairs.out","w");
fprintf(g,"%lld",(long long)n*(n-1)/2-rez);
fclose(g);
return 0;
}