Cod sursa(job #2295375)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 3 decembrie 2018 16:54:31
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
# include <fstream>
# define DIM 1000010
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int d[DIM],f[DIM],nr[DIM],p[DIM],n,x,i,j,val;
long long sol;
int main () {
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>x;
        f[x]=1;
    }
    for(i=2;i*i<=DIM-5;i++)
        if(p[i]==0){
            val=0;
            for(j=i;j<=DIM-5;j+=i){
                p[j]=1;
                if(f[j])
                    val++;
            }
            if(val>0)
                p[i]=0;
        }
    for(i=1;i<=DIM-5;i++)
            d[i]=1;
    for(i=2;i<=DIM-5;i++)
        if(d[i]==1)
            for(j=i;j<=DIM-5;j+=i){
                d[j]*=i*(1-p[i]);
                nr[j]++;
            }
    for(i=1;i<=DIM-5;i++){
        if(d[i]==i){
            val=0;
            for(j=i;j<=DIM-5;j+=i)
                if(f[j])
                    val++;
            if(nr[i]%2==0)
                sol+=(1LL*val*(val-1))/2;
            else
                sol-=(1LL*val*(val-1))/2;
        }
    }
    fout<<sol<<"\n";
    return 0;
}