Cod sursa(job #3305928)

Utilizator divadddDavid Curca divaddd Data 6 august 2025 01:11:25
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5+2;
const int VMAX = 102;
int n,v[NMAX],cnt[VMAX],mobius[VMAX];
bool ciur[VMAX];
vector<int> freeSquares;

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

int main(){
  for(int i = 1; i < VMAX; i++){
    mobius[i] = 1;
  }
  for(int i = 2; i < VMAX; i++){
    if(ciur[i] == 0){
      mobius[i] *= -1;
      for(int j = 2*i; j < VMAX; j += i){
        ciur[j] = 1;
        mobius[j] *= -1;
      }
      for(long long j = 1ll*i*i; j < VMAX; j *= i){
        for(int k = j; k < VMAX; k += j){
          mobius[k] = 0;
        }
      }
    }
    if(mobius[i] != 0){
      freeSquares.push_back(i);
    }
  }

  fin >> n;
  for(int i = 1; i <= n; i++){
    fin >> v[i];
    cnt[v[i]]++;
  }

  for(int i = 1; i < VMAX; i++){
    for(int j = 2*i; j < VMAX; j += i){
      cnt[i] += cnt[j];
    }
  }

  long long ans = 1ll*n*(n-1)/2;
  for(int num: freeSquares){
    ans += mobius[num]*(1ll*cnt[num]*(cnt[num]-1)/2);
  }
  fout << ans;
  return 0;
}