Cod sursa(job #1068135)

Utilizator geniucosOncescu Costin geniucos Data 27 decembrie 2013 22:18:35
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
using namespace std;
int maxi,val,n,smn,i,j,nr,pr[1009],cr[1009],s[1000009];
char ap[1000009];
long long rez;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
for(i=2;i<=1000;i++)
    if(cr[i]==0)
    {
        pr[++nr]=i;
        for(j=i*i;j<=1000;j+=i)
            cr[j]=1;
    }
scanf("%d",&n);
while(n)
{
    n--;
    scanf("%d",&val);
    ap[val]=1;
    if(val>maxi) maxi=val;
}
for(i=2;i<=maxi;i++)
    for(j=i;j<=maxi;j+=i)
        s[i]+=ap[j];
rez=(long long)1LL*n*(n-1)/2;
for(i=2;i<=maxi;i++)
{
    val=i;
    smn=1;
    for(j=1;pr[j]*pr[j]<=val;j++)
        while(val%pr[j]==0)
        {
            smn^=1;
            val/=pr[j];
        }
    if(val>1) smn^=1;
    if(smn==1) rez-=s[i];
    else rez+=s[i];
}
printf("%lld\n",rez);
return 0;
}