Cod sursa(job #114430)

Utilizator sims_glAlexandru Simion sims_gl Data 14 decembrie 2007 09:29:03
Problema Indep Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <string.h>

#define nm 512
#define mm 1024
#define lm 128
#define baza 1000000

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

void sum(int a[lm], int b[lm])
{
	int i, t = 0;

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

	a[0] = i - 1;
}

int n, a[nm], last[mm][lm], crt[mm][lm], nr1[lm];

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

	scanf("%d", &n);

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

	crt[a[1]][0] = crt[a[1]][1] = last[a[1]][0] = last[a[1]][1] = 1;
	nr1[0] = nr1[1] = 1;
	
	for (int i = 2; i <= n; ++i) {
		sum(crt[a[i]], nr1);

		for (int j = 1; j <= 1000; ++j) {
			int aux = cmmdc(j, a[i]);

			sum(crt[aux], last[j]);
		}
		
		memcpy(last, crt, sizeof(crt));
	}

	for (int i = crt[1][0]; i > 0; --i)
		printf("%06d", crt[1][i]);
	printf("\n");

	return 0;
}