Cod sursa(job #1567200)

Utilizator Burbon13Burbon13 Burbon13 Data 12 ianuarie 2016 23:22:58
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

using namespace std;

const int nmx = 1000002;

int n;
bool c[nmx];
int nrp[nmx];
int nrpn[nmx];

void ciur() {
    nrp[0] = 1;
    nrp[1] = 2;
    for(int i = 3; i <= nmx; i += 2)
        if(not c[i]) {
            nrp[++nrp[0]] = i;
            for(int j = 2 * i; j <= nmx; j += i)
                c[j] = true;
        }
}

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

    ciur();

    scanf("%d", &n);

    int nr,maxx = -1;
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &nr);
        for(int p = 1; nrp[p] <= nr; ++p)
            if(nr % nrp[p] == 0) {
                if(p > maxx)
                    maxx = p;
                ++ nrpn[p];
                while(nr % nrp[p] == 0)
                    nr /= nrp[p];
            }
    }

    long long total = (n * (n - 1)) / 2;

    for(int i = 1; i <= maxx; ++i)
        if(nrpn[i])
            total -= (nrpn[i] * (nrpn[i] - 1)) / 2;

    printf("%lld\n", total);

    return 0;
}