Cod sursa(job #572629)

Utilizator S7012MYPetru Trimbitas S7012MY Data 5 aprilie 2011 14:59:55
Problema Pairs Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
#include <bitset>
#define DN 1000005
using namespace std;

bitset<DN> viz,nrf/*par/impar*/,prim,divv;

int main()
{
    ifstream f("pairs.in");
    ofstream g("pairs.out");
    int n,rez=0,cc,lim=0;
    f>>n;
    for(int i=1; i<=n; ++i) {
        f>>cc;
        viz[cc]=1;
        lim=max(lim,cc);
    }
    for(int i=2; i<=lim; ++i) if(0==prim[i]) for(int j=1; j*i<=lim;++j) {
        prim[j*i]=1;
        if(0==j%i) divv[j*i]=1;
        nrf[j*i]=nrf[j*i]^1;
    }
    for(int i=2; i<=lim; ++i) if(0==divv[i]) {
        int cont=0;
        for(int j=1; j*i<=lim; ++j) if(1==viz[i*j]) ++cont;
        if(0==nrf[i]) rez-=(cont*(cont-1)/2);
        else rez+=(cont*(cont-1)/2);
    }
    g<<1LL*n*(n-1)/2-rez;
    return 0;
}