Pagini recente » Cod sursa (job #194910) | Cod sursa (job #1483787) | Cod sursa (job #843717) | Cod sursa (job #1632401) | Cod sursa (job #1559603)
#include <stdio.h>
#define MAXNR 1000000
#define TIME 500000
#define MAXN 100000
#define NRPR 100000
int pr[NRPR], dr = 0, v[MAXN], nr[MAXNR + 1];
char s[MAXNR + 1], fr[MAXNR + 1];
long long rez = 0;
inline void calc(){
int i, j;
for(i = 2; i <= TIME; i++)
for(j = i; j <= MAXNR; j += i)
nr[i] += fr[j];
}
inline void ciur(){
long long i, j;
for(i = 2; i <= TIME; i++){
if(!s[i]){
pr[dr] = i;
dr++;
for(j = i * i; j <= TIME; j += i)
s[j] = 1;
}
}
}
void bkt(int ad, int p, int k){
if(ad & 1)
rez += 1LL * nr[k] * (nr[k] - 1) / 2;
else
rez -= 1LL * nr[k] * (nr[k] - 1) / 2;
int i;
for(i = p; i < dr; i++){
if(1LL * k * pr[i] >= TIME)
i = dr;
else if(nr[k * pr[i]] > 1)
bkt(ad + 1, i + 1, k * pr[i]);
}
}
int main(){
ciur();
FILE *in = fopen("pairs.in", "r");
int n, i;
fscanf(in, "%d", &n);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
fr[v[i]]++;
}
fclose(in);
calc();
bkt(0, 0, 1);
FILE *out = fopen("pairs.out", "w");
fprintf(out, "%lld", 1LL * n * (n - 1) / 2 - rez);
fclose(out);
return 0;
}