Cod sursa(job #1088226)

Utilizator enedumitruene dumitru enedumitru Data 20 ianuarie 2014 12:00:24
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
using namespace std;
ifstream f("indep.in"); ofstream g("indrep.out");
int unu[501],v[501],C[1002][501];
typedef int Huge[501];
int cmmdc(int a, int b)
{   int r;
    while(b) r=a%b, a=b, b=r;
    return a;
}
void add(Huge A, Huge B)
{ 	int i,T=0;
	if(B[0]>A[0])
	{ 	for (i=A[0]+1;i<=B[0];) A[i++]=0;
		A[0]=B[0];
    }
    else for (i=B[0]+1;i<=A[0];) B[i++]=0;
	for (i=1;i<=A[0];i++) {A[i]+=B[i]+T; T=A[i]/10; A[i]%=10;}
	if (T) A[++A[0]]=T;
}

int main()
{	int n,i,j,t;
	f>>n;
	unu[0]=unu[1]=1;
	for(i=1;i<=n;++i) f>>v[i];
	for(i=1; i<=n; ++i)
    {   for (j=1; j<=1000; j++) {t=cmmdc(v[i],j); add(C[t],C[j]);}
        add(C[v[i]],unu);
    }
	if(C[1][0]) for (i=C[1][0]; i; i--) g<<C[1][i]; else g<<"0";
	g<<'\n'; g.close(); return 0;
}