Pagini recente » Cod sursa (job #2775023) | Cod sursa (job #1869988) | Cod sursa (job #1405953) | Cod sursa (job #1132659) | Cod sursa (job #1316103)
#include <stdio.h>
#define MAXP 1000000
#define MAXK 7
int e[MAXK], c[MAXP+1];
inline long long gauss(int x){
return x*(long long)(x+1)/2LL;
}
inline int citeste(FILE *fin){
int x=0;
char ch=fgetc(fin);
while(ch!='\n'){
x=10*x+ch-'0';
ch=fgetc(fin);
}
return x;
}
int main(){
int n, p, t, i, j, k, div, semn;
long long ans;
FILE *fin, *fout;
fin=fopen("pairs.in", "r");
fout=fopen("pairs.out", "w");
n=citeste(fin);
for(t=0; t<n; t++){
p=citeste(fin);
div=2;
k=0;
while(div*div<=p){
if(p%div==0){
e[k++]=div;
while(p%div==0){
p/=div;
}
}
div++;
}
if(p!=1){
e[k++]=p;
}
for(i=1; i<(1<<k); i++){
p=1;
semn=1;
for(j=0; j<k; j++){
if(((1<<j)&i)!=0){
p*=e[j];
semn*=-1;
}
}
c[p]+=semn;
}
}
ans=gauss(n-1);
for(i=2; i<=MAXP; i++){
if(c[i]<0){
ans-=gauss(-c[i]-1);
}else{
ans+=gauss(c[i]-1);
}
}
fprintf(fout, "%lld\n", ans);
fclose(fin);
fclose(fout);
return 0;
}