Pagini recente » Cod sursa (job #414441) | Cod sursa (job #264704) | Cod sursa (job #2605823) | Cod sursa (job #3268422) | Cod sursa (job #222910)
Cod sursa(job #222910)
#include <cstdio>
FILE *in, *out;
int v[1000000],contor,x[1000000],max=-1,c[100000];
long long n;
bool prime (int a, int b)
{
if (b==1) return true;
int c=a%b;
while (c)
{
a=b;
b=c;
c=a%b;
}
if (b==1) return true;
return false;
}
int main()
{
in = fopen ("pairs.in", "r");
out = fopen ("pairs.out", "w");
fscanf (in, "%lld", &n);
int i,j;
for (i=1; i<=n; ++i)
{
fscanf (in, "%d", &c[i]);
if (max<c[i])
max=c[i];
v[ c[i] ] = 1;
}
for (i=2; i<=max; ++i)
for (j=i; j<=max; j+=i)
x[i]+=v[j];
//for (i=1; i<=max; ++i)
// printf ("%d ",x[i]);
long long int res=0,nrdiv,putere,k;
for (i=2; i<=max; ++i)
if (x[i]>1)
{
nrdiv=0;
k=i;
int d=2;
putere=0;
while(k%d==0 && nrdiv>-1)
k/=d,putere++;
if(putere>1)
nrdiv=-1,k=0;
else
if(putere==1)
nrdiv++;
d=3;
while (k>1 && nrdiv>-1)
{
putere=0;
while(k%d==0)
k/=d,putere++;
if(putere>1)
nrdiv=-1;
else
if(putere==1)
nrdiv++;
d+=2;
if(d*d>k && k>1 && nrdiv>-1)
nrdiv++,k=1;
}
//fprintf(out,"%d \n",i);
//printf("i=%d nrdiv=%lld ", i,nrdiv);
if(nrdiv>-1 && nrdiv%2==1)
res+=x[i]*(x[i]-1)/2;
else
res-=x[i]*(x[i]-1)/2;
//printf ("i=%d res= %lld \n",i,res);
}
//if (n%2==0)
fprintf (out, "%lld", (n)*(n-1)/2-res);
//else
//fprintf (out, "%lld", ((n-1)/2)*n-res);
fclose (in);
fclose (out);
return 0;
}