Cod sursa(job #1416435)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 8 aprilie 2015 00:45:14
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#define DIM 100002
#define NMAX 1000002

using namespace std;

ifstream fin("pairs.in");
ofstream fout("pairs.out");

int N,maxim;
bool viz[NMAX];
int ok[NMAX];
long long Solution;
int main(){
    fin>>N;
    for(int i=1;i<=N;i++){
        int x;
        fin>>x;
        maxim=max(maxim,x);
        viz[x]=1;
    }
    for(int i=2;i<=maxim;i++){
        if(ok[i]){
            if(ok[i]==-1)
                continue;
            int nrc=0;
            for(int j=i;j<=maxim;j+=i)
                nrc+=viz[j];
            if(ok[i]%2==1)
                Solution+=1LL*nrc*(nrc-1)/2;
            else
                Solution-=1LL*nrc*(nrc-1)/2;
            continue;
        }
        int nrc=0;
        for(int j=i;j<=maxim;j+=i)
            nrc+=viz[j];
        for(int j=i+i;j<=maxim;j+=i){
            if(ok[j]!=-1)
                ok[j]++;
            if(j%(i*i)==0)
                ok[j]=-1;
        }
        Solution+=1LL*nrc*(nrc-1)/2;
    }
    fout<<1LL*N*(N-1)/2-Solution<<"\n";
    fin.close();fout.close();
    return 0;
}