Cod sursa(job #2108858)

Utilizator RaduNRadu Negovan RaduN Data 18 ianuarie 2018 21:20:34
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
long long n,i,j,maxim;
int v[1000002],x[1000002];
bool bo[1000002];
int main() {
    f>>n;
    for (i=1; i<=n; i++) {
        f>>v[i];
        if (v[i]>maxim)
            maxim=v[i];
        bo[v[i]]=1;
    }
    long long res = 0;
    for (i=2; i<maxim; i++) {
        if (x[i] == 0) {
            for (j=i; j<=maxim; j+=i) {
                x[j]++;
            }
        }
    }
    for (i=2; i*i<=maxim; i++) {
        for (j=i*i; j<=maxim; j+=i*i) {
            x[j] = -1;
        }
    }
    long long t = 0;
    for (i=2; i<=maxim; i++) {
        if (x[i] == -1)
            continue;
        long long nr = 0;
        for (j=i; j<=maxim; j+=i) {
            if (bo[j] == 1)
                nr++;
        }
        t=nr*(nr-1)/2;
        if (x[i]%2==0)
            res-=t;
        else
            res+=t;
    }
    t=n*(n-1)/2;

    g << t-res<<endl;

    return 0;
}