Cod sursa(job #3292200)

Utilizator Allie28Radu Alesia Allie28 Data 7 aprilie 2025 14:16:54
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

#define ll long long

using namespace std;

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

const int LMAX = 1000005;
const int INF = 0x3f3f3f3f;
const ll MOD = 1000000007;

int ciur[LMAX], divi[LMAX];
bool ap[LMAX];
//|Ai| --> nr de perechi de numere din M care sunt divizibile cu i
//tin un vector, v[i] --> nr de numere divizibile cu i

int main() {
    ll n, i, j, maxi = 0;
    fin>>n;
    for (i = 0; i < n; i++) {
        ll x;
        fin>>x;
        ap[x] = 1;
        maxi = max(maxi, x);
    }
    maxi += 5;
    for (i = 2; i < maxi; i++) {
        for (j = i; j < maxi; j += i) {
            if (ap[j]) {
                divi[i]++;
            }
        }
    }
    ll ans = 0;
    for (i = 2; i < maxi; i++) {
        if (ciur[i] == 0) {
            for (j = 2*i; j < maxi; j += i) {
                if (j%(i*i) == 0) ciur[j] = -1;
                else if (ciur[j] !=-1) ciur[j]++;
            }
        }
        if (ciur[i] != -1) {
//            fout<<i<<endl;
//            fout<<divi[i]<<endl;
            if (ciur[i]%2) {
                ans = ans - divi[i]*(divi[i] - 1)/2;
            }
            else {
                ans = ans + divi[i]*(divi[i] - 1)/2;
            }
        }
    }
    fout<<n*(n - 1)/2 - ans;


    fin.close();
    fout.close();
    return 0;
}