Cod sursa(job #109760)

Utilizator VmanDuta Vlad Vman Data 25 noiembrie 2007 12:39:21
Problema Pairs Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 2.19 kb
using namespace std;
#include <stdio.h>
#include <vector>
#include <algorithm>

#define Nmax 100001

int p[]={ 2,      3,      5,      7,     11,     13,     17,     19,     23,     29,
     31,     37,     41,     43,     47,     53,     59,     61,     67,     71,
     73,     79,     83,     89,     97,    101,    103,    107,    109,    113,
    127,    131,    137,    139,    149,    151,    157,    163,    167,    173,
    179,    181,    191,    193,    197,    199,    211,    223,    227,    229,
    233,    239,    241,    251,    257,    263,    269,    271,    277,    281,
    283,    293,    307,    311,    313,    317,    331,    337,    347,    349,
    353,    359,    367,    373,    379,    383,    389,    397,    401,    409,
    419,    421,    431,    433,    439,    443,    449,    457,    461,    463,
    467,    479,    487,    491,    499,    503,    509,    521,    523,    541,
    547,    557,    563,    569,    571,    577,    587,    593,    599,    601,
    607,    613,    617,    619,    631,    641,    643,    647,    653,    659,
    661,    673,    677,    683,    691,    701,    709,    719,    727,    733,
    739,    743,    751,    757,    761,    769,    773,    787,    797,    809,
    811,    821,    823,    827,    829,    839,    853,    857,    859,    863,
    877,    881,    883,    887,    907,    911,    919,    929,    937,    941,
    947,    953,    967,    971,    977,    983,    991,    997 };
int N,x[Nmax],q[Nmax],i,xmax,nr;
vector<int> g[Nmax];

void solve()
{
 int i,j,k,dr,sz;
 for (i=0;i<168;++i)
     {
     dr=0;
     for (j=1;j<=N;++j)
         if (x[j]%p[i]==0)
             q[++dr]=j;
     for (j=1;j<=dr;++j)
         for (k=j+1;k<=dr;++k)
             g[q[j]].push_back(q[k]);
    }
 for (i=1;i<=N;++i)
     {
      sort(g[i].begin(),g[i].end());
      sz=g[i].size();
      if (sz) ++nr;
      for (j=1;j<sz;++j)
          if (g[i][j]!=g[i][j-1]) ++nr;
     }
}

int main()
{
 freopen("pairs.in","r",stdin);
 freopen("pairs.out","w",stdout);
 scanf("%d",&N);
 for (i=1;i<=N;++i)
      scanf("%d",&x[i]);
 solve();
 printf("%d",(N*(N-1))/2-nr);
 fclose(stdin);
 fclose(stdout);
 return 0;
}