Cod sursa(job #235878)

Utilizator ProtomanAndrei Purice Protoman Data 26 decembrie 2008 11:33:31
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <algorithm>
#define bz_num 10000
#define mx 1024

using namespace std;

int n, a;
int sol[mx][mx], ad[mx][mx];

int gcd(int f_rez, int b)
{
	while (b)
	{
		int c = f_rez % b;
		f_rez = b;
		b = c;
	}
	return f_rez;
}

void aduna(int *vct_sum, int vct_ter[])
{
	int i, t = 0;
	for (i = 1; i <= vct_sum[0] || i <= vct_ter[0] || t; t /= bz_num, i++)
		vct_sum[i] = (t += vct_sum[i] + vct_ter[i]) % bz_num;
	vct_sum[0] = i - 1;
}

int main()
{
	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);
	scanf("%ld", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%ld", &a);
		memset(ad, 0, sizeof(ad));
		for (int j = 1; j <= 1000; j++)
		{
			ad[j][0] = 1;
			ad[j][1] = 0;
		}
		ad[a][1] = 1;
		for (int j = 1; j <= 1000; j++)
			aduna(ad[gcd(a, j)], sol[j]);
		for (int j = 1; j <= 1000; aduna(sol[j], ad[j]), j++);
	}
	for (; sol[1][0]; sol[1][0]--)
		printf("%ld", sol[1][sol[1][0]]);
	fclose(stdin);
	fclose(stdout);
	return 0;
}