Pagini recente » Cod sursa (job #2213696) | Cod sursa (job #2439341) | Cod sursa (job #487681) | Cod sursa (job #51983) | Cod sursa (job #1892736)
#include <fstream>
using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
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>>n;
for(i=1;i<=n;i++)
{
fi>>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;
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;
}
fo<<n*(n-1)/2-rez;
fi.close();
fo.close();
return 0;
}