Cod sursa(job #61744)

Utilizator sealTudose Vlad seal Data 20 mai 2007 15:18:34
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#define Nm 500
#define Km 1001
#define Cm 200
#define BASE 10
int M[Km][Cm],A[Nm],One[Cm]={1,1},n;

void read()
{
    int i;

    freopen("indep.in","r",stdin);
    scanf("%d",&n);
    for(i=0;i<n;++i)
	scanf("%d",A+i);
}

void add(int A[], int B[])
{
    int i,t=0;

    for(i=1;i<=A[0] || i<=B[0] || t;++i,t/=BASE)
	A[i]=(t+=A[i]+B[i])%BASE;
    A[0]=i-1;
}

int cmmdc(int a, int b)
{
    int r;

    while(b)
    {
	r=a%b;
	a=b;
	b=r;
    }
    return a;
}

void solve()
{
    int i,j,k;

    k=A[0];
    M[k][0]=M[k][1]=1;
    for(i=1;i<n;++i)
    {
	for(j=1;j<=k;++j)
	    add(M[cmmdc(j,A[i])],M[j]);
	add(M[A[i]],One);
	if(A[i]>k)
	    k=A[i];
    }
}

void write()
{
    int i;

    freopen("indep.out","w",stdout);
    for(i=M[1][0];i;--i)
	printf("%d",M[1][i]);
    if(!M[1][0])
        printf("0");
    printf("\n");
}

int main()
{
    read();
    solve();
    write();
    return 0;
}