Cod sursa(job #1700944)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 11 mai 2016 20:15:29
Problema Pairs Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>

using namespace std;

const int MX = 1e6;

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

    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;
}