Cod sursa(job #3292202)

Utilizator Allie28Radu Alesia Allie28 Data 7 aprilie 2025 14:34:52
Problema Pairs Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 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 int 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;
    fin>>n;
    for (i = 0; i < n; i++) {
        ll x;
        fin>>x;
        ap[x] = 1;
    }
    for (i = 2; i < LMAX; i++) {
        for (j = i; j < LMAX; j += i) {
            if (ap[j]) {
                divi[i]++;
            }
        }
    }
    ll ans = 0;
    for (i = 2; i < LMAX; i++) {
        if (ciur[i] == 0) { //nr prim
            for (j = i; j < LMAX; 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;
}