Cod sursa(job #1415906)

Utilizator AndyCatrunaCatruna Andy AndyCatruna Data 6 aprilie 2015 20:39:26
Problema Pairs Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
/*Let the game begin... */
#include <fstream>
#define dim 1000005
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
long long n,i,j,m,v[dim],x,sol,nr;
bool f[dim],ff[dim];
int main(){
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>x;
        f[x]=1;
        m=max(m,x);
    }
    for(i=2;i<=m;i++){
        nr=0;
        if(v[i] && (!ff[i])){
            for(j=i;j<=m;j+=i){
                nr+=f[j];
            }
            if(v[i]%2==1){
                sol+=nr*(nr-1)/2;
            }
            else{
                sol-=nr*(nr-1)/2;
            }
        }
        else{
            if(!v[i]){
                for(j=i;j<=m;j+=i){
                    nr+=f[j];
                    if(!ff[j]){
                        v[j]++;
                    }
                    if(j%(i*i)==0){
                        ff[j]=1;
                    }
                }
                sol+=nr*(nr-1)/2;
            }
        }
    }
    sol=n*(n-1)/2-sol;
    fout<<sol<<"\n";


    return 0;
}