Cod sursa(job #109604)

Utilizator MarquiseMarquise Marquise Data 25 noiembrie 2007 12:02:38
Problema Pairs Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 11-12 Marime 0.7 kb
#include <stdio.h>
#define NMAX 100001
int x[NMAX], n;
long long num;

int cmmdc(int u, int v)
{
	int k, dif, m = 0;
	if ( u == 0 || v == 0)
		return u|v;
	for ( k = 0; ( (u|v)&1 )==0; k++)
	{
		u>>=1;
		v>>=1;
	}
	while ( (u&1) == 0)
		u>>=1;
	do
	{
		while ( ( v&1) == 0 )
			v>>=1;
		if ( u <= v)
			v = v - u;
		else
		{
			dif = u - v;
			u = v;
			v = dif;
		}
	}while (v);
	m = m | (1<<k);
	return m * u;
}


int main()
{
	int i, j;
	freopen("pairs.in", "r", stdin);
	freopen("pairs.out", "w", stdout);
	scanf("%d", &n);
	for ( i = 1; i <= n; i++)
		scanf("%d", &x[i]);
	for ( i = 1; i < n; i++)
		for ( j = i+1; j <= n; j++)
			if ( cmmdc(x[i],x[j]) == 1)
				num++;
	printf("%lld", num);
	return 0;
}