Pagini recente » Borderou de evaluare (job #2566799) | Cod sursa (job #409933) | Cod sursa (job #2941402) | Borderou de evaluare (job #1514605) | Cod sursa (job #3332801)
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;
#define int long long
const int nmax=1e6;
int fr[nmax],fr2[nmax];
int miu(int a){
int cnt=0;
int d=2;
while(d*d<=a){
if(a%(d*d)==0)return 0;
if(a%d==0){
cnt++;
a/=d;
}
d++;
}
if(a>1){
cnt++;
}
if(cnt%2==1)return -1;
else return 1;
}
signed main() {
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n;
cin >> n;
for(int i=1;i<=n;i++){
int a;
cin >> a;
fr[a]=1;
}
for(int i=2;i<nmax;i++){
for(int j=i;j<nmax;j+=i){
if(fr[j]==1){
fr2[i]++;
}
}
}
int rasp=n*(n-1);
rasp/=2;
for(int i=2;i<nmax;i++){
if(fr2[i]>1){
rasp+=miu(i)*(fr2[i]*(fr2[i]-1))/2;
}
}
cout << rasp;
return 0;
}