Pagini recente » Istoria paginii runda/agagahash/clasament | Cod sursa (job #1014864) | Cod sursa (job #2420098) | Cod sursa (job #1612881) | Cod sursa (job #162415)
Cod sursa(job #162415)
#include<stdio.h>
#include<math.h>
long n,max,prim;
long a[100002],i,j,ok,p,aux,nr,fact,sirprim[1002];
long long cs,csaux;
long v[1000002],contor;
long frcv[1000002];
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
scanf("%ld",&a[i]);
frcv[a[i]]=1;
if (a[i]>max)
max=a[i];
}
for(i=2;i<=max;i++)
{
for(j=i;j<=max;j+=i)
if (frcv[j]) v[i]++;
}
for(i=2;i<=1002;i++)
{
aux=i;
ok=1;
for(j=2;j<=sqrt(aux);j++)
if (aux%j==0) ok=0;
if (ok) sirprim[++sirprim[0]]=i;
}
for(p=2;p<=max;p++)
if (v[p]>1)
{
aux=p;
nr=0;
fact=0;
while(aux!=1)
{
fact++;
contor=0;
while (aux%sirprim[fact]==0) {aux/=sirprim[fact];contor++;}
if (contor==1) nr++;
else
if (contor>1) {nr=-1;break;}
if (sirprim[fact]>sqrt(aux)&&aux!=1) {nr++;break;}
}
if (nr!=-1)
if (nr%2) cs+=(v[p]*(v[p]-1))/2;
else cs-=(v[p]*(v[p]-1))/2;
}
csaux=n*(n-1)/2;
printf("%lld\n",csaux-cs);
return 0;
}