Cod sursa(job #1744413)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 19 august 2016 18:58:46
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int f[1000005], d[1000005];
int main(){
    freopen("pairs.in", "r", stdin);
    freopen("pairs.out", "w", stdout);
    int n, i, maxim = 0, nr, x, j;
    long long ans = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i ++){
        scanf("%d", &x);
        f[x] = 1;
        maxim = max(x, maxim);
    }
    for (i = 2; i <= maxim; i ++)
        if (!d[i])
            for (j = i; j <= maxim; j += i)
                d[j] ++;
    for (i = 2; i <= maxim; i ++)
        for (j = i * i; j <= maxim; j += i * i)
            d[j] = -1;
    for (i = 2; i <= maxim; i ++){
        if (d[i] != -1){
            nr = 0;
            for (j = i; j <= maxim; j += i)
                if (f[j])
                    nr ++;
            if (d[i] & 1)
                ans -= 1LL * nr * (nr - 1) / 2;
            else
                ans += 1LL * nr * (nr - 1) / 2;
        }
    }
    printf("%lld\n", 1LL * n * (n - 1) / 2 + ans);
    return 0;
}