Cod sursa(job #2310096)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 30 decembrie 2018 16:27:34
Problema Pairs Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
using namespace std;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n,Maxim;
long long Total,Rez;
int main(){

    cin>>n;

    int v[n+5];

    for(int i=1;i<=n;i++){

        cin>>v[i];
        Maxim=max(v[i],Maxim);

    }

    int NrEl[Maxim+5]={0},Prez[Maxim+5]={0},PrDesc[Maxim+5]={0},PrUnic[Maxim+5]={0};

    for(int i=1;i<=n;i++)
        Prez[v[i]]++;

    for(int i=2;i<=Maxim;i++)
        PrUnic[i]=i;

    for(int i=2;i<=Maxim;i++)
        if(PrDesc[i]==0)
            for(int j=i;j<=Maxim;j+=i){

                PrDesc[j]++;
                PrUnic[j]/=i;

            }

    for(int i=2;i<=Maxim;i++)
            for(int j=i;j<=Maxim;j+=i)
                 NrEl[i]+=Prez[j];

    Total=1LL*n*(n-1)/2;

    for(int i=2;i<=Maxim;i++)

        if(PrUnic[i]==1){

            if(PrDesc[i]%2==0)
                Rez-=1LL*NrEl[i]*(NrEl[i]-1)/2;

            else
                Rez+=1LL*NrEl[i]*(NrEl[i]-1)/2;

        }

    cout<<Total-Rez;

}