Cod sursa(job #1295785)

Utilizator refugiatBoni Daniel Stefan refugiat Data 20 decembrie 2014 10:46:05
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
#define nmax 100002
#define lmax 1000002
int v[nmax],d[lmax];
char p[lmax],b[lmax],vaz[lmax];
int main()
{
    ifstream si;
    si.open("pairs.in");
    ofstream so;
    so.open("pairs.out");
    int n;
    si>>n;
    int i,l=0;
    for(i=0;i<n;++i)
    {
        si>>v[i];
        vaz[v[i]]=1;
        l=max(v[i],l);
    }
    for(i=2;i<=l;++i)
    {
        if(p[i]==0)
        {
            int j;
            d[i]=1;
            for(j=2;j*i<=l;++j)
            {
                if(j%i==0)
                    b[i*j]=1;
                p[i*j]=1;
                ++d[i*j];
            }
        }
    }
    long long sol=0;
    for(i=2;i<=l;++i)
    {
        if(b[i]==0)
        {
            int nr=0;
            for(int j=i;j<=l;j=j+i)
            {
                if(vaz[j]==1)
                    ++nr;
            }
            if(d[i]%2==1)
                sol+=1LL*nr*(nr-1)/2;
            else
                sol-=1LL*nr*(nr-1)/2;
        }
    }
    so<<1LL*n*(n-1)/2-sol;
}