Pagini recente » Cod sursa (job #1257238) | Cod sursa (job #1380564) | Cod sursa (job #2751454) | Cod sursa (job #913629) | Cod sursa (job #129953)
Cod sursa(job #129953)
#include<cstdio>
#include<cmath>
long long sol,rez;
int prim[80000],x[1000001];
char a[1000001],e[1000001];
int n,X,i,j,k,nr,m;
const int max=1000000;
void calc(){
for(i=2;i<=max;++i){
k=max/i;
for(j=1;j<=k;++j)
if(a[i*j]) ++x[i];}}
void prime(){
k=sqrt(max);
for(i=2;i<=k;++i){
j=i*i;
while(j<=max)
{e[j]=1;j=j+i;}}
for(i=2;i<=max;++i)
if(!e[i])prim[++m]=i;}
void solve(){
sol=(long long)n*(n-1)/2;
rez=0;
for(i=2;i<=max;++i){
if(x[i]<=1) continue;
X=i;j=1;nr=0;
for(;prim[j]<=X;++j)
if(X%prim[j]==0){
nr++;
X=X/prim[j];
if(X%prim[j]==0) {nr=0;break;}}
if(!nr) continue;
if(nr%2) rez+=(long long)x[i]*(x[i]-1)/2;
else rez-=(long long)x[i]*(x[i]-1)/2;}
sol=sol-rez;}
int main()
{freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i){scanf("%d",&X);a[X]=1;}
calc();
prime();
solve();
printf("%lld\n",sol);
fclose(stdout);
return 0;}