Pagini recente » Cod sursa (job #1248871) | Cod sursa (job #1744042) | Cod sursa (job #2762576) | Cod sursa (job #2481838) | Cod sursa (job #213713)
Cod sursa(job #213713)
#include<stdio.h>
#define NMAX 1000024
int div[NMAX],R[NMAX];
bool P[NMAX];
inline int max(const int a,const int b){return a>b?a:b;}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int N,MMAX=-1;
scanf("%d",&N);
int i,j,a1;
long long solfin=(long long)N*(N-1)/2;//numar toate posib.
for(i=1; i<=N; ++i)
{
scanf("%d",&a1);
MMAX=max(MMAX,a1);
div[a1]=1;
}
long long aux;
for(i=2; i<=MMAX; ++i)
{
for(j=i+i; j<=MMAX; j+=i)
{
if( div[j] )
++div[i];
}
if( P[i]==false )
{
R[i]=1;
for(j=i+i; j<=MMAX; j+=i)
{
P[j]=true;
if( R[j]!=-1 )
{
if( (j/i)%i==0 )
R[j]=-1;
else
++R[j];
}
}
}
if( R[i]!=-1 && div[i] )
{
aux=(long long)div[i]*(div[i]-1)/2;
if( R[i]%2==0 )
{
solfin+=aux;
}
else
{
solfin-=aux;
}
}
}
printf("%lld\n",solfin);
return 0;
}