Cod sursa(job #3255429)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 10 noiembrie 2024 16:49:56
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");

const int valmax = 1000000;
int n;

long long sol;

bool f[valmax + 5];
int x[valmax + 5];
int dz[1005];

bool p[valmax + 5];

int b[16];

void bk(int pas,int prod){
    if(pas!=1)
    {
        if(prod%2)
            sol+=(1LL*x[prod]*(x[prod]-1))/2;
        else
            sol -=(1LL*x[prod]*(x[prod]-1))/2;
    }
    for(int i = b[pas-1] + 1;i<=dz[0];i++){
        b[pas]=i;
        if(prod * dz[i] <=valmax)
            bk(pas+1,prod*dz[i]);
    }

}

void preprocess()
{
    p[0]=p[1]=true;
    int q = 1000;
    for(int i = 2; i<=q;i++)
        if(!p[i]){
            dz[++dz[0]]=i;
            for(int j = 2* i;j<=q;j+=i)
                p[j]=true;
        }
}


int main()
{
    preprocess();
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        f[x]=true;
    }
    for(int i=1;i<=valmax;i++)
        for(int j = i;j<=valmax;j+=i)
            x[i]+=f[j];
    sol=1LL*(n-1)*n/2;
    bk(1,1);
    fout<<sol;
}