Cod sursa(job #109414)

Utilizator TabaraTabara Mihai Tabara Data 25 noiembrie 2007 10:59:16
Problema Pairs Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 11-12 Marime 1.37 kb
#include <stdio.h>

#define in "pairs.in"
#define out "pairs.out"
#define NMAX 1000001

typedef int INT;
INT cmmdc( INT a, INT b );

INT cmmdc( INT a, INT b )
{
    INT k = 0;
    if ( a == 0 ) return b;
    if ( b == 0 ) return a;
    while ( (a&1) == 0 && (b&1) == 0 )
    {
          a >>= 1;
          b >>= 1;
          k++;
    }
    while ( a != b )//cel putin unul este impar
    {
          if ( (a&1) == 0 )
          {
               a >>= 1;
          }
          else if ( (b&1) == 0 )
          {
               b >>= 1;
          }
          //amandoua impare
          else if ( a > b )
          {
               a = (a-b) >> 1;
          }
          else b = (b-a) >> 1;//diferenta lor este un numar par
    }
    return a << k;
}

int n, a[NMAX];
int nrsol;

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    scanf( "%d\n", &n );
    int i, j;
    for ( i = 1; i <= n; ++i )
        scanf( "%d\n", &a[i] );
    /*for ( i = 1; i <= n; ++i )
        printf( "%d ", a[i] );
    */
    for ( i = 1; i < n; ++i )
    {
        for ( j = i + 1; j <= n; ++j )
        {
            if ( cmmdc(a[i],a[j]) == 1 ) 
            {
                 nrsol++;
                 //printf( "%d %d\n", a[i], a[j] );
            }
        }
    }
    printf( "%d\n", nrsol ); 
    return 0;
}