Cod sursa(job #556639)

Utilizator HoriaClementHoriaC HoriaClement Data 16 martie 2011 11:21:32
Problema Indep Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

using namespace std;

const short int N=1005;
const short int M=300;
short int a[2][N][M],unu[300],v[N],n;

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

void add(short int a[],short int b[])
{
	short int t=0,i;
	for(i=1;i<=a[0] || i<=b[0] || t;++i,t/=10)
		a[i]=(t+=a[i]+b[i])%10;
	a[0]=i-1;
}
short int cmmdc(short int a,short int b)
{
	if(!b)
		return a;
	return cmmdc(b,a%b);
}
void scrie(short int v[])
{
	if(!v[0])
		out<<"0\n";
	for(short int i=v[0];i>0;--i)
		out<<v[i];
	out<<"\n";
}
void  rez()
{
	in>>n;
	for(short int i=1;i<=n;++i)
		in>>v[i];
	unu[0]=unu[1]=1;
	a[1][v[1]][0]=a[1][v[1]][1]=1;
	for(short int i=2;i<=n;++i)
	{
		memset(a[i&1],0,sizeof(a[i&1]));
		for(short int j=1;j<1000;++j)
			add(a[i&1][cmmdc(j,v[i])],a[(i-1)&1][j]);
		add(a[i&1][v[i]],unu);
		for(short int j=1;j<1000;++j)
			add(a[i&1][j],a[(i-1)&1][j]);
	}
	scrie(a[n&1][1]);
}
int main()
{
	rez();
	return 0;
}