Cod sursa(job #3315306)

Utilizator Victor5539Tanase Victor Victor5539 Data 13 octombrie 2025 18:51:57
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#define ll long long

using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");

const int VALMAX=1e6;
int n,i,f[VALMAX+5],x,g[VALMAX+5],nr_primediv[VALMAX+5],j;
bool ciur[VALMAX+5];

ll sol;

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(0); fout.tie(0);

    fin>>n;
    sol=(ll)n*((ll)n-1)/2;

    while (n--)
    {
        fin>>x;
        f[x]++;
    }

    sol-=(ll)f[1]*((ll)f[1]-1)/2;

    for (i=1; i<=VALMAX; i++)
        for (j=i; j<=VALMAX; j+=i)
            g[i]+=f[j];

    for (i=1; i<=VALMAX; i++)
    {
        f[i]=g[i];
        g[i]=1;
    }

    ciur[0]=ciur[1]=1;

    for (i=2; i*i<=VALMAX; i++)
        if (!ciur[i])
            for (j=i*i; j<=VALMAX; j+=i)
                ciur[j]=1;

    for (i=2; i<=VALMAX; i++)
        if (!ciur[i])
        {
            for (j=i; j<=VALMAX; j+=i)
            {
                nr_primediv[j]++;
                g[j]*=i;
            }
        }

    for (i=2; i<=VALMAX; i++)
    {
        if (g[i]==i)
        {
            if (nr_primediv[i]%2==1)
                sol-=(ll)f[i]*((ll)f[i]-1)/2;
            else
                sol+=(ll)f[i]*((ll)f[i]-1)/2;
        }
    }

    fout<<sol;





    return 0;
}