Pagini recente » Cod sursa (job #2563737) | Cod sursa (job #2136910) | Cod sursa (job #2410911) | Cod sursa (job #2349296) | Cod sursa (job #419305)
Cod sursa(job #419305)
#include <iostream>
using namespace std;
#define LL long long
int NR[1000010], X[1000010];
bool A[1000010];
long long sol;
int main() {
FILE *f1=fopen("pairs.in", "r"), *f2=fopen("pairs.out", "w");
int i, j1, as, N, M=0;
long long j, p, q;
fscanf(f1, "%d", &N);
for(i=1; i<=N; i++) {
fscanf(f1, "%d", &as);
A[as]=1; M=max(M, as);
}
for(i=2; i<=M; i++) {
for(j1=i; j1<=M; j1+=i) {
if(A[j1]) { X[i]++; }
}
}
for(i=2; i<=M; i++) {
if(!NR[i]) {
for(j=(LL)i*i; j<=M; j+=(LL)i*i) { NR[j]=-1; }
for(j1=i; j1<=M; j1+=i) {
if(NR[j1]>-1) { NR[j1]++; }
}
}
}
for(i=2; i<=M; i++) {
if(NR[i]) {
if(NR[i]%2) {
sol+=(LL)((LL)X[i]*(X[i]-1))/(LL)2;
}
else { sol-=(LL)((LL)X[i]*(X[i]-1))/(LL)2; }
}
}
p=(LL)N*(N-1); p=p/2; sol=p-sol;
fprintf(f2, "%lld\n", sol);
fclose(f1); fclose(f2);
return 0;
}