Pagini recente » Cod sursa (job #262655) | Cod sursa (job #2446715) | Cod sursa (job #508427) | Cod sursa (job #2273622) | Cod sursa (job #418935)
Cod sursa(job #418935)
#include<iostream>
#include<string>
using namespace std;
#define MAX 1000005
#define LL long long
char este[MAX];
int pecate[MAX],catip[MAX];
int main()
{
int N,nr,nmax=0;
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
{
scanf("%d",&nr);
este[nr]=1;
nmax=max(nr,nmax);
}
for(int i=2;i<=nmax;++i)
if(!catip[i])
{
catip[i]=1;
for(LL j=(LL)i*i;j<=nmax;j+=((LL)i*i))
catip[j]=-1;
for(int j=2*i;j<=nmax;j+=i)
if(catip[j]>=0) ++catip[j];
}
/*
for(int i=2;i<=nmax;++i)
printf("%d ",catip[i]);
*/
for(int i=2;i<=nmax;++i)
if(catip[i]>=0)
{
for(int j=i;j<=nmax;j+=i)
if(este[j]) ++pecate[i];
}
LL ans=0;
for(int i=2;i<=nmax;++i)
if(catip[i]>=0) if(catip[i]%2) ans+=(LL)(pecate[i]*(pecate[i]-1))/2;
else ans-=(LL)(pecate[i]*(pecate[i]-1))/2;
printf("%I64d",(LL)(N*(N-1))/2 - ans);
return 0;
}