Pagini recente » Cod sursa (job #2614537) | Cod sursa (job #891103) | Cod sursa (job #725715) | Cod sursa (job #590720) | Cod sursa (job #238254)
Cod sursa(job #238254)
#include <stdio.h>
#define T 32000
int comb2(int n)
{
return n*(n-1)/2;
}
int pr[32000],k=0;
void ciur()
{
int i,j;
bool c[T]={false};
for (i=2; i*i<T; i++)
{
if (!c[i])
for (j=i*i; j<T; j+=i)
c[j]=true;
}
for (i=2; i<T; ++i)
if (!c[i])
pr[++k]=i;
}
bool prim(int n)
{
int i;
if (n<2)
return false;
for (i=1; pr[i]*pr[i]<=n; i++)
if (n%pr[i]==0)
return false;
return true;
}
bool verificare(int n)
{
int i,nrdiv=0;
for (i=1; pr[i]<=n/2; i++)
if (n%pr[i]==0)
{
nrdiv++;
}
if (nrdiv>=2)
return true;
return false;
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int n,i,cont,a[100005],j,nrdiv,perechi,max=0;
ciur();
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
perechi=comb2(n);
for (i=1; i<=n; i++)
if (a[i]>max)
max=a[i];
for (i=2; i<=max/2; i++)
{
nrdiv=0;
for (j=1; j<=n; j++)
if (a[j]%i==0)
nrdiv++;
if (nrdiv)
if (prim(i))
{
perechi-=comb2(nrdiv);
}
else
if (verificare(i))
{
perechi+=comb2(nrdiv);
}
}
printf("%d",perechi);
return 0;
}