Cod sursa(job #526487)

Utilizator AndreyPAndrei Poenaru AndreyP Data 28 ianuarie 2011 15:00:44
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#define N 1010
#define L 30

int n;
int a[N][L];
const int baza = 100000000;
int unu[L];

inline int cmmdc(int a,int b) {
	int r;

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

	return a;
}

inline void adun(int a[L],int b[L]) {
	int i = 1, t = 0;

	for(; i<=a[0] || i<=b[0] || t!=0; ++i,t/=baza) {
        	t += a[i] + b[i];
		a[i] = t%baza;
	}

	a[0] = i-1;
}

inline void scrie(int a[L]) {
	printf("%d",a[a[0]]);
	for(int i=a[0]-1; i>0; --i)
		printf("%.8d",a[i]);
	printf("\n");
}

int main() {
	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);

        scanf("%d",&n);
	int x;
	unu[0] = unu[1] = 1;

	for(int i=1; i<1001; ++i)
		a[i][0] = 1;

	for(int i=0; i<n; ++i) {
		scanf("%d",&x);

		for(int j=1; j<1001; ++j)
			adun(a[cmmdc(x,j)],a[j]);
		adun(a[x],unu);
	}

	scrie(a[1]);   
	return 0;
}