Cod sursa(job #1757710)

Utilizator eddie.deaconuDeaconu Stefan-Eduard eddie.deaconu Data 15 septembrie 2016 18:24:44
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;

int N, Max, M[1000001];
int ndiv[1000001], ndif[1000001];

int main()
{
    ifstream f("pairs.in");
    ofstream g("pairs.out");
    f >> N;
    long long card = 0;
    int i, x;
    for(i = 1; i <= N; i++)
    {
        f >> x;
        M[x] = 1;
        if(x > Max) Max = x;
    }
    for(i = 2; i <= Max; i++)
    {
        if(ndiv[i] == 0)
        {
            for(int j = i; j <= Max; j += i)
                ndiv[j]++;
        }
        if(ndif[i] == 0)
        {
            long long ii = 1LL * i * i;
            for(long long j = ii; j <= Max; j += ii)
                ndif[j] = 1;
            long long rez = 0;
            for(int j = i; j <= Max; j += i)
                if(M[j] == 1) rez++;
            long long t = rez * (rez - 1) / 2;
            if(ndiv[i] % 2 == 0)
                card -= t;
            else
                card += t;
        }
    }
    g << 1LL*N*(N-1)/2-card;
    f.close();
    g.close();
    return 0;
}