Pagini recente » Borderou de evaluare (job #1749377) | Cod sursa (job #2791886) | Cod sursa (job #2881127) | Cod sursa (job #3122705) | Cod sursa (job #111605)
Cod sursa(job #111605)
#include<stdio.h>
struct numar{
int ap,div;
};
numar nr[1000010];
int main(){
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int n,i,j,k,max,apar,res=0;
scanf("%d",&n);
max=0;
for(i=0;i<n;++i){
scanf("%d",&j);
nr[j].ap=1;
if(j>max)
max=j;
}
for(i=2;i<=max;++i){
if(nr[i].div>0){
if(nr[i].div%2){
apar=0;
for(j=i;j<=max;j+=i){
if(nr[j].ap)
++apar;
}
res+=(apar*(apar-1))/2;
}
else{
apar=0;
for(j=i;j<=max;j+=i){
if(nr[j].ap)
++apar;
}
res-=(apar*(apar-1))/2;
}
}
if(nr[i].div==0){
apar=0;
for(j=i;j<=max;j+=i){
++nr[j].div;
if(nr[j].ap==1)
++apar;
}
for(j=i*i;j<=max;j*=i){
for(k=j;k<=max;k+=j)
nr[k].div=-10000;
}
res+=(apar*(apar-1))/2;
}
}
res=((n*(n-1))/2)-res;
printf("%d\n",res);
fclose(stdin);
fclose(stdout);
return 0;
}