Cod sursa(job #1849611)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 17 ianuarie 2017 18:35:21
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#define MAXM 1000005

using namespace std;

int n;
int v[MAXM + 5];
char vp[MAXM + 5], a[MAXM + 5];

long long sg(int n) {
    return 1LL * n * (n + 1) / 2;
}

int main()
{
    long long rez = 0;
    int val, i, j, per = 0;
    freopen("pairs.in", "r", stdin);
    freopen("pairs.out", "w", stdout);
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &val);
        a[val] = 1;
    }
    for(i = 2; i <= MAXM; i += 2)
        v[i] = 1;
    for(i = 4; i <= MAXM; i += 4)
        vp[i] = 1;
    for(i = 3; i <= MAXM; i += 2)
    {
        if(v[i] == 0)
        {
            per = 0;
            for(j = i; j <= MAXM; j += i)
                v[j]++;
            if(1LL * i * i <= MAXM)
                for(j = i * i; j <= MAXM; j += i * i)
                    vp[j] = 1;
        }
    }

    for(i = 2; i <= MAXM; i++)
    {
        if(vp[i] == 0)
        {
            per = 0;
            for(j = i; j <= MAXM; j += i)
                per += a[j];
            if(v[i] & 1)
                rez += sg(per);
            else rez -= sg(per);
        }
    }
    rez = sg(n) - rez;
    printf("%lld", rez);
    return 0;
}