Cod sursa(job #742125)

Utilizator GrimpowRadu Andrei Grimpow Data 28 aprilie 2012 16:53:15
Problema Indep Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
short int a[2][1001][200],v[501],n;
void add(short int A[], short int B[])
{
      int i, t = 0;
      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;
}
int cmmdc(int x, int y)
{
	int r;
	while(x*y)
	{
		r=x%y;
		x=y;
		y=r;
	}
	return x;
}
void reset(short int c[])
{
	int i;
	for(i=c[0];i>=1;i--)
		c[i]=0;
	c[0]=0;
}
int main()
{
	int i,j,d;
	f>>n;
	for(i=1;i<=n;i++)
		f>>v[i];
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=1000;j++)
			reset(a[i&1][j]);
		a[i&1][v[i]][0]=1;
		a[i&1][v[i]][1]=1;
		for(j=1;j<=1000;j++)
			add(a[i&1][d=cmmdc(v[i],j)],a[(i-1)&1][j]);
		for(j=1;j<=1000;j++)
			add(a[i&1][j],a[(i-1)&1][j]);
	}
	if(a[n&1][1][0]==0)
		g<<0;
	else
		for(i=a[n&1][1][0];i>=1;i--)
			g<<a[n&1][1][i];
	return 0;
}