Cod sursa(job #380408)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 6 ianuarie 2010 09:12:05
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;

int n,i,j,x[1000010],a[1000010],ma,rez;

int main()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	
	scanf("%d",&n);
	
	for(i=1;i<=n;++i) { scanf("%d",&j);
	                    ma=max(ma,j);
                        a[j]=1;
	                  }
    
    for(i=1;i<=n;++i) 
        for(j=i;j<=ma;j+=i) if(a[j]) x[i]++;
	
	for(i=2;i<=ma;++i) { j=i;
		                 int ok=0,nr=0;
		                 while(!j%2&&ok<=1) { j/=2;
						                      ok++;
						                      nr++;
						                    }
						 if(ok<2)
						 { int m=int(sqrt(i));
						   for(int k=3;k<=m&&ok<2;k+=2) { ok=0;
						                                 while(!j%k&&ok<2)
													      {	j/=k;
														    ok++;
                                                            nr++;
                                                          }
						                                }
                            if(j>1) nr++;
							if(ok<2)
							{
                            if(nr%2) rez+=(x[i]*(x[i]-1))/2;
                            else rez-=(x[i]*(x[i]-1))/2;
							}
						 }
	                    }
    
    printf("%d\n",((n*(n-1))/2)-rez);
    fclose(stdin);
    fclose(stdout);

	return 0;
}