Pagini recente » Cod sursa (job #148416) | Cod sursa (job #1276146) | Cod sursa (job #603920) | Cod sursa (job #2591513) | Cod sursa (job #3305928)
#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;
}