Pagini recente » Cod sursa (job #1026101) | Cod sursa (job #236509) | Cod sursa (job #1924882) | Cod sursa (job #1409842) | Cod sursa (job #129380)
Cod sursa(job #129380)
#include <stdio.h>
#include <string.h>
int c[2][1024][200], n, v[1024];
void add(int*, int*);
void add(int*);
int cmmdc(int a, int b)
{
if(a % b == 0)
return b;
return cmmdc(b, a % b);
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int i, j, crt = 0, temp, k;
scanf("%d", &n);
if(n == 1)
{
printf("1\n");
return 0;
}
for(i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
}
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= 1000; ++j)
memcpy(c[crt][j], c[1 - crt][j], sizeof(c[crt][j]));
for(j = 1; j <= 1000; ++j)
{
temp = cmmdc(v[i], j);
add(c[crt][temp], c[1 - crt][j]);
}
add(c[crt][v[i]]);
/*
for(j = 1; j <= 6; ++j)
{
printf("%d %d: ", i, j);
for(k = c[crt][j][0]; k > 0; --k)
{
printf("%d", c[crt][j][k]);
}
printf("\n");
}
*/
crt = 1 - crt;
}
// printf("%d\n",c[1 - crt][1][0]);
printf("%d", c[1 - crt][1][c[1 - crt][1][0]]);
for(i = c[1 - crt][1][0] - 1; i > 0; --i)
{
printf("%08d", c[1 - crt][1][i]);
}
return 0;
}
void add(int* a)
{
++a[1];
int i = 1;
while(a[i] == 100000000)
{
a[i]= 0;
++a[i + 1];
++i;
}
if(a[0] < i - 1)
a[0] = i - 1;
if(a[0] == 0)
a[0] = 1;
}
void add(int* a, int* b)
{
int i, t;
for(i = 1, t = 0; i <= a[0] || i <= b[0] || t; ++i, t /= 100000000)
{
a[i] = (t += a[i] + b[i]) % 100000000;
}
if(a[0] < i - 1)
a[0] = i - 1;
}