Pagini recente » tema | Cod sursa (job #2368142) | Cod sursa (job #1869658) | Monitorul de evaluare | Cod sursa (job #593236)
Cod sursa(job #593236)
# include <cstdio>
const char *FIN = "pairs.in", *FOU = "pairs.out" ;
const int MAX = 1000001 ;
int cnt[MAX], N ;
bool prim[MAX], stop[MAX], X[MAX] ;
int main (void) {
freopen (FIN, "r", stdin) ;
scanf ("%d", &N) ;
for (int i = 1, x; i <= N; ++i) {
scanf ("%d", &x) ;
++cnt[x] ;
}
long long sol = 1LL * N * (N - 1) / 2 ;
for (int i = 2; i < MAX; ++i) {
for (int j = i << 1; j < MAX; j += i)
cnt[i] += cnt[j] ;
if (prim[i] == 0) {
X[i] = 1 ;
for (int j = i << 1; j < MAX; j += i) {
prim[j] = 1, X[j] ^= 1 ;
if ( (j / i) % i == 0 ) stop[j] = 1 ;
}
}
if (stop[i]) continue ;
sol += (X[i] ? -1LL : 1LL) * cnt[i] * (cnt[i] - 1) / 2 ;
}
fprintf (fopen (FOU, "w"), "%lld", sol) ;
}