Cod sursa(job #2310085)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 30 decembrie 2018 16:11:35
Problema Pairs Scor 10
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int a[100005],v[1005],nr,maxim,b[1000005],nrc;
bool prim[1005],viz[1000005];
long long n,rez;
int descompunere(int x)
{
    int i,nrd;
    nrd=0;
    for(i=1;v[i]*v[i]<=x;i++)
    {
        if(x%v[i]==0)
        {
            x=x/v[i];
            nrd++;
            if(x%v[i]==0)
            {
                return 0;
            }
        }
    }
    if(x>1)
    {
        nrd++;
    }
    return nrd;
}
int main()
{
    int i,j;
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
        viz[a[i]]=1;
        if(a[i]>maxim)
        {
            maxim=a[i];
        }
    }
    for(i=2;i*i<=1000;i++)
    {
        if(prim[i]==0)
        {
            for(j=2;j<=1000/i;j++)
            {
                prim[i*j]=1;
            }
        }
    }
    for(i=2;i<=1000;i++)
    {
        if(prim[i]==0)
        {
            nr++;
            v[nr]=i;
        }
    }
    for(i=2;i<=maxim;i++)
    {
        for(j=i;j<=maxim;j=j+i)
        {
            if(viz[j]==1)
            {
                b[i]++;
            }
        }
    }
    for(i=2;i<=maxim;i++)
    {
        nrc=descompunere(i);
        if(nrc>0)
        {
            if(nrc%2==0)
            {
                rez=rez-b[i]*(b[i]-1)/2;
            }
            else
            {
                rez=rez+b[i]*(b[i]-1)/2;
            }
        }
    }
    g<<n*(n-1)/2-rez;
    return 0;
}