Cod sursa(job #112058)

Utilizator DranaXumAlexandru Dumitru Paunoiu DranaXum Data 3 decembrie 2007 00:00:22
Problema Pairs Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>

int x[100001];

unsigned int gcd(unsigned int u, unsigned int v)
{
    int shift;

    /* GCD(0,x) := x */
    if (u == 0 || v == 0)
      return u | v;

    /* Let shift := lg K, where K is the greatest power of 2
       dividing both u and v. */
    for (shift = 0; ((u | v) & 1) == 0; ++shift) {
        u >>= 1;
        v >>= 1;
    }

    while ((u & 1) == 0)
      u >>= 1;

    /* From here on, u is always odd. */
    do {
        while ((v & 1) == 0)  /* Loop X */
          v >>= 1;

        /* Now u and v are both odd, so diff(u, v) is even.
           Let u = min(u, v), v = diff(u, v)/2. */
        if (u <= v) {
            v -= u;
        } else {
            int diff = u - v;
            u = v;
            v = diff;
        }
        v >>= 1;
    } while (v != 0);

    return u << shift;
}


int main()
{
    FILE *fin,*fout;
    int i,j,n,k,ext,perechi=0;
    fin=freopen("pairs.in","r",stdin);
    fout=freopen("pairs.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x[i]);
        for(j=1;j<i;j++)
        {
            if(gcd(x[i],x[j])==1) {
                perechi++;
            }
        }
    }
    printf("%d",perechi);
    fclose(fin);
    fclose(fout);
    return 0;
}