Cod sursa(job #109566)

Utilizator DastasIonescu Vlad Dastas Data 25 noiembrie 2007 11:54:33
Problema Pairs Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 11-12 Marime 1.75 kb
#include <cstdio>

const int maxn = 100001;
const int maxp = 2000;

FILE *in = fopen("pairs.in","r"), *out = fopen("pairs.out","w");

int n;
int a[maxn];

int k;
char x[maxp];
int primes[maxp];
void ciur()
{
    primes[++k] = 2;

    for ( int i = 4; i <= maxp; i += 2 )
        x[i] = 'x';

    for ( int i = 3; i <= maxp; i += 2 )
        if ( x[i] != 'x' )
        {
            primes[++k] = i;

            for ( int j = i+i; j <= maxp; j += i )
                x[j] = 'x';
        }
}

int h[maxp]; // h[i] = cate numere au ca factor prim i

int tk[maxn];
void read()
{
    fscanf(in, "%d", &n);

    for ( int i = 1; i <= n; ++i )
    {
        fscanf(in, "%d", &a[i]);

//        for ( int j = 1; primes[j] <= a[i] && j <= k; ++j )
//            if ( a[i] % primes[j] == 0 )
//                ++h[ primes[j] ];
    }
}

int cmmdc(int a, int b)
{
//    if ( b == 0 )
//        return a;
//
//    return cmmdc(b, a % b);

    int r = 0;
    while ( b )
    {
        r = b;
        b = a % b;
        a = r;
    }

    return a;
}

int main()
{
//    ciur();
    read();

    long long cnt = 0;

    int temp = 0;


    for ( int i = 1; i <= n; ++i )
        for ( int j = i+1; j <= n; ++j )
            if ( cmmdc(a[i], a[j]) == 1 )
                ++cnt;

//
//    printf("%d\n", cnt);
//    cnt = 0;
//
//    for ( int i = 1; i <= n; ++i )
//    {
//        temp = n - i;
//
//        for ( int j = 1; primes[j] <= a[i] && j <= k; ++j )
//            if ( a[i] % primes[j] == 0 )
//                temp = temp - h[ primes[j] ] + 1, --h[ primes[j] ];
//
//        //printf("%d %d\n", a[i], temp);
//        cnt += temp;
//    }
//


    fprintf(out, "%lld\n", cnt);

	return 0;
}