Cod sursa(job #774589)

Utilizator ichigo2908mantu radu ichigo2908 Data 6 august 2012 02:21:53
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;

ifstream f("indep.in");
ofstream g("indep.out");

const short C=101;
int n, v[501], d[2][1001][C];

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

void suma (int x[C], int y[C])
{
	int i, aux, t=0;
	for(i=1 ; i<=x[0] || i<=y[0] || t!=0 ; i++)
	{
		aux = t + x[i] + y[i];
		x[i] = aux % 10;
		t = aux / 10;
	}
	x[0] = i - 1;
}

void afisare (int x[C])
{
	for(int i=x[0] ; i>0 ; i--)
		g<<x[i];
}

void reinit (int a)
{
	int i, j;
	for(i=1 ; i<=1000 ; i++)
		for(j=0 ; j<C ; j++)
			d[a][i][j] = 0;
}

int main()
{
	int i, j, c;
	bool i1, i2;

	f>>n;
	for(i=1;i<=n;i++)
		f>>v[i];

	d[0][0][0] = d[0][0][1] = 1;

	for(i=1 ; i<=n ; i++)
	{
		i1 = i%2;
		i2 = 1 - i1;
		reinit(i1);

		for(j=0 ; j<=1000 ; j++)
		{
			c = cmmdc(v[i], j);
			suma(d[i1][c], d[i2][j]);
		}
		for(j=0 ; j<=1000 ; j++)
			suma(d[i1][j], d[i2][j]);
	}

	afisare(d[n%2][1]);

	f.close();
	g.close();

	return 0;
}