Pagini recente » Cod sursa (job #2780343) | Cod sursa (job #1867699) | Cod sursa (job #1836538) | Cod sursa (job #1435418) | Cod sursa (job #6583)
Cod sursa(job #6583)
#include<stdio.h>
typedef short lnum[200];
const int maxn = 1010;
const int maxn2 = 500;
short j;
lnum mat[maxn2][maxn];
short a[maxn];
short i;
lnum s;
short n;
short max(short a,short b)
{
if (a<b) return b;
return a;
}
void ad(lnum &a,lnum &b,lnum &c)
{
int i;
a[0]=max(b[0],c[0]);
for(i=1;i<=max(b[0],c[0]);i++)
{
a[i]=c[i]+b[i];
}
for(i=1;i<=a[0];i++)
{
if (a[i]>=10)
{
a[i]%=10;
a[i+1]++;
if (a[a[0]+1]>0) a[0]++;
}
}
}
/*
void add(lnum a, lnum b, lnum c)
{
int i, t = 0;
for(i = 1; i <= a[0] || i <= b[0] || t; ++ i) {
c[i] = a[i]+b[i]+t;
t = c[i]/10;
c[i] %= 10;
}
c[0] = i-1;
}
*/
short cmmdc(short a, short b)
{
while (a)
{
short aux=a;
a=b%a;
b=aux;
}
return b;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%hd",&n);
for(i=1;i<=n;i++)
{
short x;
scanf("%hd",&a[i]);
s[1]=1;
s[0]=1;
ad(mat[i][a[i]],mat[i][a[i]],s);
}
short x;
for(i=2;i<=n;i++)
{
for(j=1;j<=1000;j++)
ad(mat[i][j],mat[i][j],mat[i-1][j]);
for(j=1000;j>0;j--)
if (mat[i-1][j][0]!=0)
{
x=cmmdc(j,a[i]);
ad(mat[i][x],mat[i][x],mat[i-1][j]);
}
}
for(i=mat[n][1][0];i>0;i--)
printf("%hd",mat[n][1][i]);
printf("\n");
return 0;
}