Cod sursa(job #1700947)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 11 mai 2016 20:19:25
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>

using namespace std;

const int NM = 1e6+5;

int i,j, x,n, prime[NM], cnt, MX;
bool fact2[NM], a[NM];
long long ans=0;

int main()
{
    freopen("pairs.in", "r", stdin);
    freopen("pairs.out", "w", stdout);

    scanf("%d", &n);
    for(i=1; i<=n; ++i)
    {
        scanf("%d", &x);
        a[x]=1;
        if(x>MX) MX=x;
    }

    for(i=2; i<=MX; ++i)
    if(!prime[i])
    {
        for(j=i; j<=MX; j+=i)
        {
            ++prime[j];
            if(1LL*i*i<=MX && j%(i*i)==0) fact2[j]=1;
        }
    }

    for(i=1; i<=MX; ++i)
    if(!fact2[i])
    {
        cnt=0;
        for(j=i; j<=MX; j+=i)
            cnt+=(a[j]==1);
        ans += 1LL*cnt*(cnt-1)*(prime[i]&1?-1:1);
    }

    printf("%lld\n", ans/2);

    return 0;
}