Pagini recente » Cod sursa (job #670615) | Cod sursa (job #18753) | Cod sursa (job #953547) | Cod sursa (job #1551308) | Cod sursa (job #782998)
Cod sursa(job #782998)
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
#define base 10000
int N, A[510], Sol[1010][2010], B[2010];
int cmmdc(int a, int b)
{
if(!b) return a;
else return cmmdc(b, a % b);
}
void Adun(int A[], int B[])
{
if(B[0] > A[0])
{
for(int i = A[0] + 1; i <= B[0]; i++) A[i] = 0;
A[0] = B[0];
}else
{
for(int i = B[0] + 1; i <= A[0]; i++) B[i] = 0;
}
int T = 0;
for(int i = 1; i <= A[0]; i++)
{
A[i] += B[i] + T;
T = A[i] / base;
A[i] %= base;
}
if(T) A[++A[0]] = T;
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int i, j;
scanf("%i", &N);
for(i = 1; i <= N; i++) scanf("%i", &A[i]);
B[0] = B[1] = 1;
for(i = 1; i <= N; i++)
{
for(j = 1; j <= 1000; j++)
Adun(Sol[cmmdc(j, A[i])], Sol[j]);
Adun(Sol[A[i]], B);
}
if(!Sol[1][Sol[1][0]]) printf("0\n");
else
{
printf("%d", Sol[1][Sol[1][0]]);
for(i = Sol[1][0] - 1; i; i--) printf("%04d", Sol[1][i]);
}
return 0;
}