Pagini recente » Cod sursa (job #2722896) | Cod sursa (job #260183) | Cod sursa (job #2401758) | Monitorul de evaluare | Cod sursa (job #111787)
Cod sursa(job #111787)
#include<stdio.h>
char nr[1000100];
int div[1000100],ap[1000100];
int main(){
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int n,i,j,k,max;
long long rez;
scanf("%d",&n);
max=0;
for(i=0;i<n;++i){
scanf("%d",&j);
nr[j]=1;
if(j>max)
max=j;
}
for(i=2;i<=max;++i){
if(div[i]>1){
for(j=i;j<=max;j+=i){
if(nr[j])
++ap[i];
}
}
if(div[i]==0){
for(j=i;j<=max;j+=i){
++div[j];
if(nr[j])
++ap[i];
}
k=i*i;
for(j=k;j<=max;j+=k)
div[j]=-1000;
}
}
rez=0;
for(i=2;i<=max;++i){
if(ap[i]){
if(div[i]%2==0)
rez-=(((long long)ap[i])*(ap[i]-1))/2;
else
rez+=(((long long)ap[i])*(ap[i]-1))/2;
}
}
rez=(((long long)n)*(n-1))/2-rez;
printf("%lld\n",rez);
fclose(stdin);
fclose(stdout);
return 0;
}