Cod sursa(job #628011)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 31 octombrie 2011 12:30:06
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
using namespace std;
long n,x[501];
short a[501][1001][250],u[300];
//alta sursa de 100...
void suma(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 a,int b)
{
    int r;
    while (b!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}

int main()
{
    int i,j;
    freopen("indep.in","r",stdin);
    freopen("indep.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; ++i)
    {
        scanf("%d",&x[i]);
    }
    u[0]=u[1]=1;
    a[1][x[1]][0]=a[1][x[1]][1]=1;
    for(i=2; i<=n; ++i)
    {
        memset(a[i&1],0,sizeof(a[i&1]));
        for(j=1; j<1001; j++)
            suma(a[i&1][cmmdc(j,x[i])],a[(i-1)&1][j]);
        suma(a[i&1][x[i]],u);
        for(j=1; j<1001; j++)
            suma(a[i&1][j],a[(i-1)&1][j]);
    }
    if(a[n&1][1][0]==0)
    {
        printf("0");
        return 0;
    }
    for(i=a[n&1][1][0]; i>0; --i)
        printf("%d",a[n&1][1][i]);
    return 0;
}