Cod sursa(job #551225)

Utilizator loginLogin Iustin Anca login Data 10 martie 2011 15:46:36
Problema Indep Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <iostream>
# define DIM 1024
# define B 1000000000
using namespace std;
int n, v[DIM], d[1000][DIM], nmax;

void read ()
{
	ifstream fin ("indep.in");
	fin>>n;
	for(int i=1;i<=n;++i)
	{
		fin>>v[i];
		if (v[i]>nmax)
			nmax=v[i];
	}
}
/*
void aduna (int s[], int a[], int b[])
{
	int q, t=0;
	for(int i=1;i<=a[0] || i<=b[0];++i)
	{
		q=a[i]+b[i]+t;
		s[i]=q%B;
		t=q/B;
		s[0]=i;
	}
	while (t)
	{
		s[++s[0]]=t%B;
		t/=B;
	}
}*/

int cmmdc (int x, int y)
{
	int r;
	do{
		r=x%y;
		x=y;
		y=r;
	}
	while (r);
	return x;
}

void din ()
{
	int p=1;
//	for(int j=1;j<=nmax;++j)
//		d[1][j][0]=1;
//	d[1][v[1]][1]=1;
	d[1][v[1]]=1;
	for(int i=2;i<=n;++i)
	{
		p=1-p;
		//d[i][v[i]][1]=1;
		d[i][v[i]]=1;
		for(int j=1;j<=nmax;++j)
			d[i][cmmdc(v[i],j)]+=d[i-1][j]+(j!=cmmdc(v[i],j)?d[i-1][cmmdc(v[i],j)]:0);
				
			
			//aduna(d[p][cmmdc(v[i],j)],d[1-p][j],d[1-p][cmmdc(v[i],j)]);
	}
}
/*
void write ()
{
	ofstream fout ("indep.out");
	fout<<d[n%2][1][d[n%2][1][0]];
	for(int i=d[n%2][1][0]-1;i;--i)
	{
		int x;
		x=d[n%2][1][i];
		while (x*10<B)
		{
			fout<<"0";
			x*=10;
		}
		fout<<d[n%2][1][i];
	}
}*/
		
int main ()
{
	read (); 
	din();
	ofstream fout ("indep.out");
	fout<<d[n][1];//write ();
	return 0;
}