Cod sursa(job #1293787)

Utilizator Yasin_ibraimIbraim Yasin Yasin_ibraim Data 16 decembrie 2014 16:11:26
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<stdio.h>
#include<bitset>

using namespace std;

#define N 1000000
bitset <N> p,n_ok;
int f[N],viz[N],x;
unsigned long long M;

int main()
{
    FILE *fin,*fout;
    fin=fopen("pairs.in","r");
    fout=fopen("pairs.out","w");
    int n;
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
    {
            fscanf(fin,"%d",&x);
            viz[x]=1;
            if(x>M)
            {
                   M=x;
            }
    }
    for(int i=2;i<=M;i++)
    {
            if(!p[i])
            {
                     f[i]=1;
                     for(int j=2;j<=M/i;++j)
                     {
                             p[i*j]=1;
                             if(j%i==0) n_ok[i*j]=1;
                             f[i*j]++;
                     }
            }

    }
    unsigned long long sol=0,nr;
    for(int i=2;i<=M;++i)
    {
            if(!n_ok[i])
            {
                        nr=0;
                        for(int j=1;j<=M/i;j++)
                        {
                                if(viz[i*j]) nr++;
                                if(f[i]%2) sol+=nr*(nr-1)/2;
                                else sol-=nr*(nr-1)/2;
                        }
            }
    }
    sol=n*(n-1)/2-sol;
    fprintf(fout,"%d\n",sol);
}