Cod sursa(job #495765)

Utilizator unknownliviuMaria Liviu Valentin unknownliviu Data 26 octombrie 2010 20:23:32
Problema Indep Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
const int C=200;
int v[539],n,a[2][1010][C];
void read()
{
	in>>n;
	for(int i=1;i<=n;i++)
		in>>v[i];
}
int cmmdc(int a  ,int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}
void add(int A[], int B[])
{
	int tr=0,i;
	for( i=1;i<=A[0] || i<=B[0] || tr ;tr/=10,++i)
	{
		tr=A[i]+B[i]+tr;
		A[i]=tr%10;
	}
	A[0]=i-1;
}
	
void solve()
{
	int d,unu[C]={0};
	unu[0]=unu[1]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=1000;j++)
			memset(a[i%2][j],0,C*sizeof(int));
		for(int j=1;j<=1000;j++)
		{
			d=cmmdc(v[i],j);
			add(a[i%2][d],a[1-i%2][j]);
		}
		for(int j=1;j<=1000;j++)
			add(a[i%2][j],a[1-i%2][j]);
		add(a[i%2][v[i]],unu);
	}
	for(int i=a[n%2][1][0];i>=1;i--)
		out<<a[n%2][1][i];
}	
int main()
{
	read();
	solve();
	return 0;
}