Cod sursa(job #2985896)

Utilizator AswVwsACamburu Luca AswVwsA Data 27 februarie 2023 12:32:54
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;

const int VMAX = 1000000;
int f[VMAX + 1];
int mob[VMAX + 1];
int main()
{
    ifstream cin("pairs.in");
    ofstream cout("pairs.out");
    int n, i, j;
    cin >> n;
    int mx = 0;
    for (i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        f[x]++;
        mx = max(mx, x);
    }
    mob[1] = 1;
    long long ans = 0;
    for (i = 2; i <= mx; i++)
    {
        mob[i]--;
        for (j = 2 * i; j <= mx; j += i)
            mob[j] -= mob[i];
        int nr = 0;
        long long pairs = 0;
        for (j = i; j <= mx; j += i)
        {
            nr += f[j];
        }
        for (j = i; j <= mx; j += i)
            if (f[j])
            {
                pairs += nr - f[j];
                nr -= f[j];
            }
        ans += -pairs * mob[i];
    }
  //  for (i = 2; i <= mx; i++)
    //    cout << mob[i] << " ";
    long long total = 0;
    int numero = n;
    for (i = 1; i <= mx; i++)
        if (f[i])
        {
            total += numero - f[i];
            numero -= f[i];
        }
    cout << total - ans;
}