Cod sursa(job #2510970)

Utilizator betybety bety bety Data 17 decembrie 2019 20:09:49
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<fstream>
#include<vector>
#include<algorithm>
#define ll long long
#define pb(x) push_back(x)
using namespace std;
typedef pair<int,int> ii;
const int lim = 1e5+5;
const int lim_val = 1e6+5;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
bool f[lim_val];
int viz[lim_val],nrdiv[lim_val];
int main()
{
    ll i,j;
    int maxx = 1;
    ll n;
    fin>>n;
    ll sol = n*(n-1)/2;
    for(i = 1 ; i <= n ; ++i)
    {
        int x;
        fin>>x;
        f[x]++;
        maxx = max(maxx , x);
    }
    for(i = 2 ; i <= maxx ; ++i)
    {
        if(nrdiv[i] == 0)
        {
            for(j = i ; j <= maxx ; j+= i)
                nrdiv[j]++;
            for(j = i*i ; j <= maxx ; j += i*i)
                viz[j] = 1;
        }
        if(viz[i] == 0)
        {
            ll cnt = 0;
            for(j = i ; j <= maxx ; j += i)
            {
                cnt += f[j];
            }
            if(nrdiv[i]&1)
            {
                sol -= ((cnt*(cnt-1))>>1);
            }
            else
            {
                sol += ((cnt*(cnt-1))>>1);
            }
        }
    }
    fout<<sol;
    return 0;
}