Pagini recente » Cod sursa (job #2897457) | Cod sursa (job #433473) | Cod sursa (job #2089536) | Cod sursa (job #2915668) | Cod sursa (job #1316109)
#include <stdio.h>
#define MAXP 1000000
#define SQRT 1000
#define MAXM 168
#define MAXK 7
int e[MAXK], c[MAXP+1], d[SQRT+1], v[MAXM+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;
}
inline void ciur(){
int i, j, m;
for(i=2; i*i<=SQRT; i++){
if(d[i]==0){
for(j=i*i; j<=SQRT; j+=i){
d[j]=1;
}
}
}
m=0;
for(i=2; i<=SQRT; i++){
if(d[i]==0){
v[m++]=i;
}
}
//printf("%d\n", m);
v[m++]=SQRT+1;//santinela
}
int main(){
int n, p, t, i, j, k, semn;
long long ans;
FILE *fin, *fout;
fin=fopen("pairs.in", "r");
fout=fopen("pairs.out", "w");
ciur();
n=citeste(fin);
for(t=0; t<n; t++){
p=citeste(fin);
i=0;
k=0;
while(v[i]*v[i]<=p){
if(p%v[i]==0){
e[k++]=v[i];
while(p%v[i]==0){
p/=v[i];
}
}
i++;
}
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;
}