Cod sursa(job #61615)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 20 mai 2007 01:18:35
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#define fin  "indep.in"
#define fout "indep.out"
#define Nmax 501
#define Dmax 1001
#define Cmax 51

int N;
long long ret,v[Nmax][Dmax];

int gcd(int a,int b) {
	if (b==0)
		return a;
	else
		return gcd(b,a%b);
}

void add(int A[],int B[]) {
int i,t=0;
	for (i=1;i<=A[0] || i<=B[0] || t;++i) {
		if (i>A[0])
			A[i]=0;
		if (i>B[0])
			B[i]=0;
		A[i]+=B[i]+t;
		
		if (A[i]>9) {
			t=1;
			A[i]%=10;
		}
		else
			t=0;
	}

	A[0]=i-1;
}

void print(int A[]) {
int i;
	for (i=A[0];i>0;--i)
		printf("%d",A[i]);
	printf("\n");
}

int main() {
int i,j,k,x,tmp,lim;
int aux[Cmax];
 	
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d",&N);
	lim=0;
	for (i=1;i<=N;++i) {
		scanf("%d",&x);
		if (x>lim)
			lim=x;
		for (j=1;j<=lim;++j) {
		       	tmp=gcd(j,x);
			for (k=1;k<i;++k)
				v[i][tmp]+=v[k][j];
		}
		v[i][x]++;
		ret+=v[i][1];
	}

	printf("%lld\n",ret);

	fclose(stdin); fclose(stdout);

	return 0;
}