Cod sursa(job #1700941)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 11 mai 2016 20:09:48
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

using namespace std;

const int MX = 1e6;

int i,j, x,n, a[MX+5], prime[MX+5], cnt;
bool fact2[MX+5];
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];
    }

    for(i=2; i<=MX; ++i)
    {
        if(!prime[i])
            for(j=i; j<=MX; j+=i)
                ++prime[j];

        if(1LL*i*i<=1LL*MX)
        for(j=i*i; j<=MX; j+=i*i)
            fact2[j]=1;
    }

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

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

    return 0;
}