Cod sursa(job #495762)

Utilizator taseTanase Alexandru tase Data 26 octombrie 2010 20:18:30
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<string.h>
const int C = 200;

int n,v[502],a[2][1002][C];
int cmmdc(int a, int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}
void suma(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];
		a[i]=tr%10;
	}
	a[0]=i-1;
}
	
int main()
{
	freopen("indep.in","r",stdin);
	freopen("indep.out","w",stdout);
	int i,j,d,unu[C]={0};
	unu[0]=unu[1]=1;
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&v[i]);
	for(i=1;i<=n;++i)
	{
		for(j=1;j<=1000;++j)
			memset(a[i%2][j],0,C*sizeof(int));
		for(j=1;j<=1000;++j)
		{
			d=cmmdc(v[i],j);
			suma(a[i%2][d],a[1-i%2][j]);
		}
		for(j=1;j<=1000;++j)
			suma(a[i%2][j],a[(i-1)%2][j]);
		suma(a[i%2][v[i]],unu);
	}
	for(i=a[n%2][1][0];i>=1;i--)
		printf("%d",a[n%2][1][i]);
	return 0;
}