Cod sursa(job #918542)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 18 martie 2013 22:50:48
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>
#define pb push_back
#define N 1000000

using namespace std;

bool neprim[N+10];
vector<int>divs[N+10];
int n, i, x, m, conf, prod, j, nr[N+10];
long long rez;

void ciur()
{
    int i, j;
    for(i = 2; i <= N; i++)
    if(!neprim[i])
    {
        divs[i].pb(i);
        for(j = 2*i; j <= N; j += i)
        {
            neprim[j] = 1;
            divs[j].pb(i);
        }
    }
}

int main()
{
    ifstream fi("pairs.in");
    ofstream fo("pairs.out");
    fi >> n;
    ciur();
    for(i = 1; i <= n; i++)
    {
        fi >> x;
        m = divs[x].size();
        for(conf = 1; conf < (1<<m); ++conf)
        {
            prod = 1;
            for(j = 0; j < m; j++)
                if(((1<<j) & conf) > 0) prod *= divs[x][j];
            nr[prod]++;
        }
    }
    for(i = 1; i <= N; i++)
    {
        m = divs[i].size();
        if(m%2) rez += nr[i]; else rez -= nr[i];
    }
    fo << rez << "\n";
    return 0;
}