Pagini recente » Cod sursa (job #1571713) | Cod sursa (job #2250646) | Cod sursa (job #1061103) | Cod sursa (job #3000236) | Cod sursa (job #2450684)
#include <bits/stdc++.h>
///N=100000
///M=1000000
using namespace std;
///
typedef long long ll;
///
ll n, m, i, j, k, sol, mx;
ll ciur[1000001];
bitset<1000001> exists, p;
///
void read();
void solve();
void write();
void buildCiur();
void bkt(ll last, ll val, ll mp, bool get);
int main()
{
read();
solve();
write();
return 0;
}
void read(){
freopen("pairs.in", "r", stdin);
scanf("%lld", &n);
for(i=1; i<=n; ++i) {
ll x;
scanf("%lld", &x);
exists[x]=true;
mx=max(mx, x);
}
fclose(stdin);
}
void solve(){
buildCiur();
for(i=2; i<=mx; ++i) if(!p[i]){
ll total=0, mult;
mult=((ciur[i]&1)?1:-1);
for(j=i; j<=mx; j+=i) if(exists[j]) ++total;
sol+=1LL*mult*total*(total-1)/2;
}
}
void write(){
freopen("pairs.out", "w", stdout);
printf("%lld", n*(n-1)/2-sol);
fclose(stdout);
}
void buildCiur(){
for(i=2; i<=mx; ++i){
if(ciur[i]) continue;
for(j=i; j<=mx; j+=i) {
++ciur[j];
if(!(j%(i*i))) p[j]=true;
}
}
}