Pagini recente » Cod sursa (job #653061) | Cod sursa (job #3302125) | Cod sursa (job #3338610) | Cod sursa (job #2162957) | Cod sursa (job #3305926)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int NMAX = 1e5+2;
const int VMAX = 1e6+2;
int n,v[NMAX],cnt[VMAX],mobius[VMAX];
bool ciur[VMAX];
vector<int> freeSquares;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
signed 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(int j = i*i; j < VMAX; j *= i){
mobius[j] = 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];
}
}
int ans = n*(n-1)/2;
for(int num: freeSquares){
ans += mobius[num]*(cnt[num]*(cnt[num]-1)/2);
}
fout << ans;
return 0;
}