Pagini recente » tema | Cod sursa (job #2167193) | Cod sursa (job #1561991) | tema | Cod sursa (job #265103)
Cod sursa(job #265103)
#include <stdio.h>
#include <math.h>
#define MAX_D 1000010
int n, k, rad, d, m, sol;
int fact[110];
int fol[MAX_D];
void calc_div(int val) {
rad = (int) sqrt(val); d = 1; m = 0;
while (val != 1 && d <= rad) {
d++;
if (val % d == 0) fact[++m] = d;
while (val % d == 0) val /= d;
}
if (val != 1) fact[++m] = val;
}
int back(int val) {
int rez = 0;
for (int i = 1; i < (1 << m); i++) {
int n0 = 0; d = 1;
for (int j = 0; j < m; j++)
if (i & (1 << j)) {
n0++;
d *= fact[j + 1];
}
if (n0 % 2) rez += fol[d];
else rez -= fol[d];
fol[d]++;
}
return rez;
}
int main() {
freopen("pairs.in", "r", stdin);
freopen("pairs.out", "w", stdout);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &k);
calc_div(k);
sol += i - back(k);
}
printf("%d\n", sol);
return 0;
}