Cod sursa(job #119649)

Utilizator crawlerPuni Andrei Paul crawler Data 2 ianuarie 2008 16:07:46
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>

#define Nmax 1000024

char a[Nmax];
int x[Nmax];

int main()
{
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
    
    int n,w,max=0,k;
    
    scanf("%d", &n);
    
    for (int i=1;i<=n;++i)
    {
        scanf("%d", &w);
        a[w]=1;  
        if(w>max) max = w;  
    }
    
    for (int i=2;i<=max;++i)    
     for (int j=i;j<=max;j+=i)
      if (a[j]) ++x[i];
      
    long long ret,W;
    
    ret = n-1;
    ret *= n;
    ret /= 2;
      
    for (int i=2;i<=max;++i)          
    {
        w = i; k = 0;
        for (int j=2;j<=w;++j)
         if (w%j==0)
         {
              ++k;
              w/=j;
              if (w%j==0) k = -1;
              if (k<0) break;      
         }
        
        W = x[i]-1;
        W *= x[i];
        W /= 2;
         
        if (k>0) if (k&1) ret -= W; else ret += W;          
    }
      
    printf("%lld\n", ret);  
    
    return 0;    
}