Pagini recente » Cod sursa (job #1756585) | Cod sursa (job #3202950) | Cod sursa (job #2754714) | Cod sursa (job #2828044) | Cod sursa (job #1892740)
#include <cstdio>
using namespace std;
FILE *fi,*fo;
int n;
int i,j;
bool F[1000001],E[1000001];
int A[100001],P[100001],k,X[1000001];
int maxv;
bool ok;
int nrd;
int rez,e,x;
int main()
{
fi=fopen("pairs.in","r");
fo=fopen("pairs.out","w");
fscanf(fi,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(fi,"%d",&A[i]);
F[A[i]]++;
if(maxv<A[i])
maxv=A[i];
}
for(i=1;i<=maxv;i++)
for(j=1;i*j<=maxv;j++)
if(F[i*j]>0)
X[i]++;
for(i=1;i<=maxv;i++)
E[i]=true;
for(i=2;i<=maxv;i++)
if(E[i])
{
P[++k]=i;
for(j=i+i;j<=maxv;j+=i)
E[j]=false;
}
for(i=2;i<=maxv;i++)
{
j=1,ok=true,nrd=0;
x=i;
while(P[j]*P[j]<=x)
{
e=0;
while(x%P[j] == 0)
{
e++;
x/=P[j];
}
if(e>1)
{
ok=false;
break;
}
if(e==1)
nrd++;
j++;
}
if(x>1)
nrd++;
if(ok)
if(nrd%2==0)
rez-=X[i]*(X[i]-1)/2;
else
rez+=X[i]*(X[i]-1)/2;
}
fprintf(fo,"%d",n*(n-1)/2-rez);
fclose(fi);
fclose(fo);
return 0;
}